1 // { dg-do compile { target c++11 } }
2 
3 struct X {};
4 
5 struct B {
6 	int i;
BB7 	B (int _i) : i(_i) { }
~BB8 	~B () { i = 0; }
9 };
10 
11 template <typename T>
12 struct A : public B {
AA13 	A () : B(-1) { }
~AA14 	~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() { }
46 	virtual int f () { return 0; }
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; }
63