| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| |
|
| | #include <cassert> |
| |
|
| | |
| | |
| | |
| | #if defined(__clang__) |
| | #pragma clang diagnostic ignored "-Wexceptions" |
| | #endif |
| |
|
| | #if __cplusplus < 201103L |
| | #define DISABLE_NULLPTR_TESTS |
| | #endif |
| |
|
| | struct A {}; |
| | A a; |
| | const A ca = A(); |
| |
|
| | void test1 () |
| | { |
| | try |
| | { |
| | throw &a; |
| | assert(false); |
| | } |
| | catch ( const A* ) |
| | { |
| | } |
| | catch ( A *) |
| | { |
| | assert (false); |
| | } |
| | } |
| |
|
| | void test2 () |
| | { |
| | try |
| | { |
| | throw &a; |
| | assert(false); |
| | } |
| | catch ( A* ) |
| | { |
| | } |
| | catch ( const A *) |
| | { |
| | assert (false); |
| | } |
| | } |
| |
|
| | void test3 () |
| | { |
| | try |
| | { |
| | throw &ca; |
| | assert(false); |
| | } |
| | catch ( const A* ) |
| | { |
| | } |
| | catch ( A *) |
| | { |
| | assert (false); |
| | } |
| | } |
| |
|
| | void test4 () |
| | { |
| | try |
| | { |
| | throw &ca; |
| | assert(false); |
| | } |
| | catch ( A *) |
| | { |
| | assert (false); |
| | } |
| | catch ( const A* ) |
| | { |
| | } |
| | } |
| |
|
| | struct base1 {int x;}; |
| | struct base2 {int x;}; |
| | struct derived : base1, base2 {}; |
| |
|
| | void test5 () |
| | { |
| | try |
| | { |
| | throw (derived*)0; |
| | assert(false); |
| | } |
| | catch (base2 *p) { |
| | assert (p == 0); |
| | } |
| | catch (...) |
| | { |
| | assert (false); |
| | } |
| | } |
| |
|
| | void test6 () |
| | { |
| | #if !defined(DISABLE_NULLPTR_TESTS) |
| | try |
| | { |
| | throw nullptr; |
| | assert(false); |
| | } |
| | catch (base2 *p) { |
| | assert (p == nullptr); |
| | } |
| | catch (...) |
| | { |
| | assert (false); |
| | } |
| | #endif |
| | } |
| |
|
| | void test7 () |
| | { |
| | try |
| | { |
| | throw (derived*)12; |
| | assert(false); |
| | } |
| | catch (base2 *p) { |
| | assert ((unsigned long)p == 12+sizeof(base1)); |
| | } |
| | catch (...) |
| | { |
| | assert (false); |
| | } |
| | } |
| |
|
| |
|
| | struct vBase {}; |
| | struct vDerived : virtual public vBase {}; |
| |
|
| | void test8 () |
| | { |
| | vDerived derived; |
| | try |
| | { |
| | throw &derived; |
| | assert(false); |
| | } |
| | catch (vBase *p) { |
| | assert(p != 0); |
| | } |
| | catch (...) |
| | { |
| | assert (false); |
| | } |
| | } |
| |
|
| | void test9 () |
| | { |
| | #if !defined(DISABLE_NULLPTR_TESTS) |
| | try |
| | { |
| | throw nullptr; |
| | assert(false); |
| | } |
| | catch (vBase *p) { |
| | assert(p == 0); |
| | } |
| | catch (...) |
| | { |
| | assert (false); |
| | } |
| | #endif |
| | } |
| |
|
| | void test10 () |
| | { |
| | try |
| | { |
| | throw (vDerived*)0; |
| | assert(false); |
| | } |
| | catch (vBase *p) { |
| | assert(p == 0); |
| | } |
| | catch (...) |
| | { |
| | assert (false); |
| | } |
| | } |
| |
|
| | int main() |
| | { |
| | test1(); |
| | test2(); |
| | test3(); |
| | test4(); |
| | test5(); |
| | test6(); |
| | test7(); |
| | test8(); |
| | test9(); |
| | test10(); |
| | } |
| |
|