Forward port r208464 from google/gcc-4_8.
[official-gcc.git] / main / gcc / testsuite / g++.dg / cpp0x / regress / regress4.C
blobb56263ae5ae08b2fbad7380497a4d6b5d62d2d51
1 // PR c++/49663
2 // { dg-options -std=c++0x }
4 struct Nosm
6     int m_R;
7 };
9 namespace dx {
11     struct onc
12     {
13         typedef void(*Cb)();
15         onc(Cb cb);
16     };
18     struct grac
19     {
20         template<class Derived> static void once();
21     };
23     template<class Derived>
24         struct tonc : onc
25         {
26             tonc() : onc(&grac::once<Derived>) {}
28             static Derived& get();
29         };
31     template<class Derived> void grac::once()
32     {
33         tonc<Derived>::get().h();
34     }
37 namespace
39     template<typename T, int = sizeof(&T::m_R)>
40         struct has_R { };
42     template<typename T>
43         inline void
44         setR(T* m, has_R<T>* = 0)
45         { }
47     inline void setR(...) { }
50 template<typename M>
51     struct Qmi
52     : dx::tonc<Qmi<M> >
53     {
54         void h()
55         {
56             setR(&msg);
57         }
59         M msg;
60     };
62 Qmi<Nosm> x;