aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit13.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit13.C')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit13.C32
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit13.C
new file mode 100644
index 0000000..3165863
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit13.C
@@ -0,0 +1,32 @@
+// Make sure that A's destructor doesn't affect constexpr
+// or exception-spec on D's default constructor.
+// { dg-do compile { target c++11 } }
+
+struct A {
+ constexpr A() noexcept: i(0) { }
+ int i;
+ ~A() noexcept(false);
+};
+
+struct B: A { };
+
+// Should get static initialization, so no constructor call.
+// { dg-final { scan-assembler-not "_ZN1BC1Ev" } }
+B b;
+
+struct C { C() noexcept; ~C() noexcept(false); };
+struct D: C { };
+extern D d;
+
+void *operator new(__SIZE_TYPE__, void*) noexcept;
+
+#define SA(X) static_assert((X),#X)
+SA(noexcept(new (&d) D));
+
+struct E: virtual C { };
+extern E e;
+SA(noexcept (new (&e) E));
+
+struct F { C c; };
+extern F f;
+SA(noexcept (new (&f) F));