PR c++/85765 - SFINAE and non-type default template arg.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / dc3.C
blob9c1fd53e4fe13184293c4da058a59c763ef2639d
1 // { dg-do compile { target c++11 } }
3 struct X {};
5 struct B {
6         int i;
7         B (int _i) : i(_i) { }
8         ~B () { i = 0; }
9 };
11 template <typename T>
12 struct A : public B {
13         A () : B(-1) { }
14         ~A () { }
17 template <typename T>
18 struct A<T*> : public B {
19         A () : B(-1) { }
20         A (int i) : A() { }
21         A (double b) : A(static_cast<int>(b)) { }
22         A (double b, double b2) : A(b2) { }
23         ~A () { }
26 void f_A () { A<X*> a(2.0, 3.0); }
28 struct C {
29         C () { }
30         virtual ~C() { }
31         virtual int f () = 0;
34 template <typename T>
35 struct D : public C {
36         int i;
37         D (int _i) : C(), i(_i) { }
40 template <>
41 struct D<X> : public C {
42         int i;
43         D (int _i) : C(), i(_i) { }
44         D () : D(-1) { }
45         virtual ~D() { }
46         virtual int f () { return 0; }
49 void f_D () { D<X>* d = new D<X>(); }
51 template <typename T>
52 struct E {
55 template <>
56 struct E<int> {
57         int i;
58         E () : E(0) { }
59         E (int _i) : i(_i) { }
62 void f_E () { E<int> e; }