| // { dg-do run } | |
| struct S; | |
| template <S* (S::*p)()> | |
| struct F { | |
| S* f (S& s) | |
| { | |
| return (s.*p)(); | |
| } | |
| }; | |
| template <int S::*p> | |
| struct D { | |
| void d (S& s) | |
| { | |
| (s.*p) = 3; | |
| } | |
| }; | |
| struct S { | |
| S* g (); | |
| int i; | |
| F<&S::g> fg; | |
| D<&S::i> di; | |
| S* h(), k(F<&S::h>); | |
| F<&S::g> fg2; | |
| D<&S::i> di2; | |
| }; | |
| S* S::g() | |
| { | |
| return this; | |
| } | |
| S* S::h() | |
| { | |
| return this; | |
| } | |
| int main() | |
| { | |
| S s; | |
| s.i = 2; | |
| s.di.d (s); | |
| if (s.i != 3) | |
| return 1; | |
| if (s.fg2.f(s) != &s) | |
| return 1; | |
| } |