aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc3.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc3.C')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc3.C62
1 files changed, 62 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc3.C
new file mode 100644
index 0000000..9c6fd56
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc3.C
@@ -0,0 +1,62 @@
+// { dg-do compile { target c++11 } }
+
+struct X {};
+
+struct B {
+ int i;
+ B (int _i) : i(_i) { }
+ ~B () { i = 0; }
+};
+
+template <typename T>
+struct A : public B {
+ A () : B(-1) { }
+ ~A () { }
+};
+
+template <typename T>
+struct A<T*> : public B {
+ A () : B(-1) { }
+ A (int i) : A() { }
+ A (double b) : A(static_cast<int>(b)) { }
+ A (double b, double b2) : A(b2) { }
+ ~A () { }
+};
+
+void f_A () { A<X*> a(2.0, 3.0); }
+
+struct C {
+ C () { }
+ virtual ~C() { }
+ virtual int f () = 0;
+};
+
+template <typename T>
+struct D : public C {
+ int i;
+ D (int _i) : C(), i(_i) { }
+};
+
+template <>
+struct D<X> : public C {
+ int i;
+ D (int _i) : C(), i(_i) { }
+ D () : D(-1) { }
+ virtual ~D() { }
+ virtual int f () { }
+};
+
+void f_D () { D<X>* d = new D<X>(); }
+
+template <typename T>
+struct E {
+};
+
+template <>
+struct E<int> {
+ int i;
+ E () : E(0) { }
+ E (int _i) : i(_i) { }
+};
+
+void f_E () { E<int> e; }