20 D(const D&) throw() { }
25 E(const E&) throw(int) { }
30 E1(const E1&) throw(int) { throw int(); }
40 G() throw(int) { throw int(); }
50 H1(H1&) throw(int) { throw int(); }
56 I(const I&) throw() { }
61 I1(I1&) throw(int) { throw int(); }
62 I1(const I1&) throw() { }
68 J(const J&) throw() { }
69 J(volatile J&) throw() { }
70 J(const volatile J&) throw() { }
76 { return __has_nothrow_copy(T); }
84 { return !!__has_nothrow_copy(T); }
91 static const bool trait = __has_nothrow_copy(T);
95 const bool My2<T>::trait;
97 template<typename T, bool b = __has_nothrow_copy(T)>
99 { static const bool trait = b; };
101 template<typename T, bool b>
102 const bool My3_help<T, b>::trait;
110 { return My3_help<T>::trait; }
113 #define PTEST(T) (__has_nothrow_copy(T) && f<T>() \
114 && My<T>().f() && My2<T>::trait && My3<T>().f())
116 #define NTEST(T) (!__has_nothrow_copy(T) && !f<T>() \
117 && !My<T>().f() && !My2<T>::trait && !My3<T>().f())
121 assert (PTEST (int));
122 assert (NTEST (int (int)));
123 assert (NTEST (void));
127 assert (PTEST (C[]));