mirror of
https://github.com/llvm-mirror/libcxx.git
synced 2025-10-21 23:30:38 +08:00
Implement P0599: 'noexcept for hash functions'. Fix a couple of hash functions (optional<T> and unique_ptr<T>) which were mistakenly marked as 'noexcept'. Reviewed as https://reviews.llvm.org/D31234
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@298573 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -36,6 +36,7 @@ test()
|
||||
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()));
|
||||
typedef typename std::underlying_type<T>::type under_type;
|
||||
|
||||
H h1;
|
||||
|
@@ -24,6 +24,8 @@
|
||||
#include <limits>
|
||||
#include <cmath>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
template <class T>
|
||||
void
|
||||
test()
|
||||
@@ -31,6 +33,7 @@ test()
|
||||
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()));
|
||||
H h;
|
||||
|
||||
std::size_t t0 = h(0.);
|
||||
|
@@ -31,6 +31,7 @@ test()
|
||||
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()));
|
||||
H h;
|
||||
|
||||
for (int i = 0; i <= 5; ++i)
|
||||
@@ -64,42 +65,42 @@ int main()
|
||||
test<long long>();
|
||||
test<unsigned long long>();
|
||||
|
||||
// LWG #2119
|
||||
// LWG #2119
|
||||
test<std::ptrdiff_t>();
|
||||
test<size_t>();
|
||||
|
||||
test<int8_t>();
|
||||
test<int16_t>();
|
||||
test<int32_t>();
|
||||
test<int64_t>();
|
||||
test<int8_t>();
|
||||
test<int16_t>();
|
||||
test<int32_t>();
|
||||
test<int64_t>();
|
||||
|
||||
test<int_fast8_t>();
|
||||
test<int_fast16_t>();
|
||||
test<int_fast32_t>();
|
||||
test<int_fast64_t>();
|
||||
test<int_fast8_t>();
|
||||
test<int_fast16_t>();
|
||||
test<int_fast32_t>();
|
||||
test<int_fast64_t>();
|
||||
|
||||
test<int_least8_t>();
|
||||
test<int_least16_t>();
|
||||
test<int_least32_t>();
|
||||
test<int_least64_t>();
|
||||
test<int_least8_t>();
|
||||
test<int_least16_t>();
|
||||
test<int_least32_t>();
|
||||
test<int_least64_t>();
|
||||
|
||||
test<intmax_t>();
|
||||
test<intptr_t>();
|
||||
|
||||
test<uint8_t>();
|
||||
test<uint16_t>();
|
||||
test<uint32_t>();
|
||||
test<uint64_t>();
|
||||
test<uint8_t>();
|
||||
test<uint16_t>();
|
||||
test<uint32_t>();
|
||||
test<uint64_t>();
|
||||
|
||||
test<uint_fast8_t>();
|
||||
test<uint_fast16_t>();
|
||||
test<uint_fast32_t>();
|
||||
test<uint_fast64_t>();
|
||||
test<uint_fast8_t>();
|
||||
test<uint_fast16_t>();
|
||||
test<uint_fast32_t>();
|
||||
test<uint_fast64_t>();
|
||||
|
||||
test<uint_least8_t>();
|
||||
test<uint_least16_t>();
|
||||
test<uint_least32_t>();
|
||||
test<uint_least64_t>();
|
||||
test<uint_least8_t>();
|
||||
test<uint_least16_t>();
|
||||
test<uint_least32_t>();
|
||||
test<uint_least64_t>();
|
||||
|
||||
test<uintmax_t>();
|
||||
test<uintptr_t>();
|
||||
|
@@ -23,6 +23,8 @@
|
||||
#include <type_traits>
|
||||
#include <limits>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
template <class T>
|
||||
void
|
||||
test()
|
||||
@@ -30,6 +32,7 @@ test()
|
||||
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()));
|
||||
H h;
|
||||
|
||||
typedef typename std::remove_pointer<T>::type type;
|
||||
@@ -38,7 +41,17 @@ test()
|
||||
assert(h(&i) != h(&j));
|
||||
}
|
||||
|
||||
void test_nullptr()
|
||||
{
|
||||
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()));
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test<int*>();
|
||||
test_nullptr();
|
||||
}
|
||||
|
Reference in New Issue
Block a user