| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| |
|
| | #include <cassert> |
| | #include <cstdlib> |
| |
|
| | struct A {}; |
| |
|
| | template<typename T, bool CanCatchNullptr> |
| | static void catch_nullptr_test() { |
| | try { |
| | throw nullptr; |
| | } catch (T &p) { |
| | assert(CanCatchNullptr && !static_cast<bool>(p)); |
| | } catch (...) { |
| | assert(!CanCatchNullptr); |
| | } |
| | } |
| |
|
| | int main() |
| | { |
| | using nullptr_t = decltype(nullptr); |
| |
|
| | |
| | catch_nullptr_test<nullptr_t, true>(); |
| | catch_nullptr_test<const nullptr_t, true>(); |
| | catch_nullptr_test<volatile nullptr_t, true>(); |
| | catch_nullptr_test<const volatile nullptr_t, true>(); |
| |
|
| | |
| | #if 0 |
| | |
| | |
| | catch_nullptr_test<void *, false>(); |
| | catch_nullptr_test<void * const, false>(); |
| | catch_nullptr_test<int *, false>(); |
| | catch_nullptr_test<A *, false>(); |
| | catch_nullptr_test<int A::*, false>(); |
| | catch_nullptr_test<int (A::*)(), false>(); |
| | #endif |
| | } |
| |
|