mirror of
https://github.com/boostorg/core.git
synced 2025-07-31 13:27:29 +02:00
Update max_size() implementation and tests
This commit is contained in:
@ -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) {
|
||||||
|
@ -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()
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user