- // Form a return type that can only be instantiated with an integral or enum
- // types (or with nullptr_t in C++11).
- template <typename U, U u = U()> struct check1_return_type { char c[2]; };
- template <typename U> static check1_return_type<U> checker1(U*);
- static char checker1(...);
-
- // Form a return type that can only be instantiated with nullptr_t in C++11
- // mode. It's harmless in C++98 mode, but this allows us to filter nullptr_t
- // when building in C++11 mode without having to detect that mode for each
- // different compiler.
- struct nonce {};
- template <typename U, nonce* u = U()>
- struct check2_return_type { char c[2]; };
- template <typename U> static check2_return_type<U> checker2(U*);
- static char checker2(...);