OSDN Git Service

2012-12-15 Richard Guenther <rguenther@suse.de>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / cpp0x / dc3.C
1 // { dg-do compile }
2 // { dg-options --std=c++0x }
3
4 struct X {};
5
6 struct B {
7         int i;
8         B (int _i) : i(_i) { }
9         ~B () { i = 0; }
10 };
11
12 template <typename T>
13 struct A : public B {
14         A () : B(-1) { }
15         ~A () { }
16 };
17
18 template <typename T>
19 struct A<T*> : public B {
20         A () : B(-1) { }
21         A (int i) : A() { }
22         A (double b) : A(static_cast<int>(b)) { }
23         A (double b, double b2) : A(b2) { }
24         ~A () { }
25 };
26
27 void f_A () { A<X*> a(2.0, 3.0); }
28
29 struct C {
30         C () { }
31         virtual ~C() { }
32         virtual int f () = 0;
33 };
34
35 template <typename T>
36 struct D : public C {
37         int i;
38         D (int _i) : C(), i(_i) { }
39 };
40
41 template <>
42 struct D<X> : public C {
43         int i;
44         D (int _i) : C(), i(_i) { }
45         D () : D(-1) { }
46         virtual ~D() { }
47         virtual int f () { }
48 };
49
50 void f_D () { D<X>* d = new D<X>(); }
51
52 template <typename T>
53 struct E {
54 };
55
56 template <>
57 struct E<int> {
58         int i;
59         E () : E(0) { }
60         E (int _i) : i(_i) { }
61 };
62
63 void f_E () { E<int> e; }