diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept01.C')
-rw-r--r-- | gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept01.C | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept01.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept01.C new file mode 100644 index 0000000..9f42535 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept01.C @@ -0,0 +1,84 @@ +// Test for noexcept-expression +// { dg-do compile { target c++11 } } +// { dg-options "-O2" } + +#include <typeinfo> + +#define SA(X) static_assert(X, #X) + +void f(); +void g() throw(); +SA(noexcept(g())); +SA(!noexcept(f())); +SA(!noexcept(throw 1)); +SA(noexcept(42)); + +struct A +{ + virtual ~A(); +}; + +struct B: public A +{ + virtual ~B(); +}; + +A* ap; + +struct C { }; +C* cp; + +SA (noexcept (dynamic_cast<B*>(ap))); +SA (!noexcept (dynamic_cast<B&>(*ap))); +SA (!noexcept (typeid (*ap))); +SA (noexcept (typeid (*cp))); + +SA (!noexcept (true ? 1 : throw 1)); +SA (!noexcept (true || true ? 1 : throw 1)); + +SA (noexcept (C())); + +struct D +{ + D() throw(); +}; + +SA (noexcept (D())); + +struct E +{ + E() throw(); + ~E(); +}; + +SA (noexcept (E())); + +struct F +{ + virtual void f(); +}; + +SA (noexcept (F())); + +struct G +{ + G() = default; + ~G() = default; +}; + +SA (noexcept (G())); + +template <class T, bool b> +void tf() +{ + SA (noexcept (T()) == b); +} + +template void tf<int,true>(); +template void tf<E, true>(); + +// Make sure that noexcept uses the declared exception-specification, not +// any knowledge we might have about whether or not the function really +// throws. +void h() { } +SA(!noexcept(h())); |