111
|
1 // { dg-do compile { target c++11 } }
|
|
2
|
|
3 struct X {};
|
|
4
|
|
5 struct B {
|
|
6 int i;
|
|
7 B (int _i) : i(_i) { }
|
|
8 ~B () { i = 0; }
|
|
9 };
|
|
10
|
|
11 template <typename T>
|
|
12 struct A : public B {
|
|
13 A () : B(-1) { }
|
|
14 ~A () { }
|
|
15 };
|
|
16
|
|
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 () { }
|
|
24 };
|
|
25
|
|
26 void f_A () { A<X*> a(2.0, 3.0); }
|
|
27
|
|
28 struct C {
|
|
29 C () { }
|
|
30 virtual ~C() { }
|
|
31 virtual int f () = 0;
|
|
32 };
|
|
33
|
|
34 template <typename T>
|
|
35 struct D : public C {
|
|
36 int i;
|
|
37 D (int _i) : C(), i(_i) { }
|
|
38 };
|
|
39
|
|
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() { }
|
131
|
46 virtual int f () { return 0; }
|
111
|
47 };
|
|
48
|
|
49 void f_D () { D<X>* d = new D<X>(); }
|
|
50
|
|
51 template <typename T>
|
|
52 struct E {
|
|
53 };
|
|
54
|
|
55 template <>
|
|
56 struct E<int> {
|
|
57 int i;
|
|
58 E () : E(0) { }
|
|
59 E (int _i) : i(_i) { }
|
|
60 };
|
|
61
|
|
62 void f_E () { E<int> e; }
|