Can't test for noexcept on C++03; std::hash<nullptr_t> isn't available until C++17

llvm-svn: 298580
This commit is contained in:
Marshall Clow 2017-03-23 06:20:18 +00:00
parent 490889c405
commit d832316853
3 changed files with 9 additions and 0 deletions

View File

@ -470,6 +470,7 @@ template <> struct hash<double>;
template <> struct hash<long double>;
template<class T> struct hash<T*>;
template <> struct hash<nullptr_t>; // C++17
} // std

View File

@ -41,13 +41,16 @@ test()
assert(h(&i) != h(&j));
}
// can't hash nullptr_t until c++17
void test_nullptr()
{
#if TEST_STD_VER > 14
typedef std::nullptr_t T;
typedef std::hash<T> H;
static_assert((std::is_same<typename H::argument_type, T>::value), "" );
static_assert((std::is_same<typename H::result_type, std::size_t>::value), "" );
ASSERT_NOEXCEPT(H()(T()));
#endif
}
int main()

View File

@ -150,11 +150,16 @@
#define TEST_NORETURN [[noreturn]]
#endif
#if TEST_STD_VER < 11
#define ASSERT_NOEXCEPT(...)
#define ASSERT_NOT_NOEXCEPT(...)
#else
#define ASSERT_NOEXCEPT(...) \
static_assert(noexcept(__VA_ARGS__), "Operation must be noexcept")
#define ASSERT_NOT_NOEXCEPT(...) \
static_assert(!noexcept(__VA_ARGS__), "Operation must NOT be noexcept")
#endif
/* Macros for testing libc++ specific behavior and extensions */
#if defined(_LIBCPP_VERSION)