Update max_size() implementation and tests

This commit is contained in:
Glen Fernandes
2019-04-25 13:05:06 -04:00
parent e859d01186
commit 5a549b8b22
2 changed files with 17 additions and 5 deletions

View File

@ -59,13 +59,16 @@ struct default_allocator {
BOOST_CONSTEXPR default_allocator(const default_allocator<U>&) BOOST_CONSTEXPR default_allocator(const default_allocator<U>&)
BOOST_NOEXCEPT { } BOOST_NOEXCEPT { }
#if defined(PTRDIFF_MAX) && defined(SIZE_MAX)
BOOST_CONSTEXPR std::size_t max_size() const BOOST_NOEXCEPT { BOOST_CONSTEXPR std::size_t max_size() const BOOST_NOEXCEPT {
#if defined(PTRDIFF_MAX) && defined(SIZE_MAX) && (PTRDIFF_MAX < SIZE_MAX) return PTRDIFF_MAX < SIZE_MAX / sizeof(T)
return PTRDIFF_MAX; ? PTRDIFF_MAX : SIZE_MAX / sizeof(T);
#else
return ~static_cast<std::size_t>(0) / sizeof(T);
#endif
} }
#else
BOOST_CONSTEXPR std::size_t max_size() const BOOST_NOEXCEPT {
return ~static_cast<std::size_t>(0) / sizeof(T);
}
#endif
#if !defined(BOOST_NO_EXCEPTIONS) #if !defined(BOOST_NO_EXCEPTIONS)
T* allocate(std::size_t n) { T* allocate(std::size_t n) {

View File

@ -135,11 +135,20 @@ void test_construct_other()
(void)a5; (void)a5;
} }
#if defined(PTRDIFF_MAX) && defined(SIZE_MAX)
template<class T>
std::size_t max_size()
{
return PTRDIFF_MAX < SIZE_MAX / sizeof(T)
? PTRDIFF_MAX : SIZE_MAX / sizeof(T);
}
#else
template<class T> template<class T>
std::size_t max_size() std::size_t max_size()
{ {
return ~static_cast<std::size_t>(0) / sizeof(T); return ~static_cast<std::size_t>(0) / sizeof(T);
} }
#endif
void test_max_size() void test_max_size()
{ {