remove max_size() extension from polymorphic_allocator. It is unneeded
llvm-svn: 296831
This commit is contained in:
parent
9a90c08a62
commit
25f9f927c6
|
@ -181,7 +181,7 @@ public:
|
|||
// 8.6.3, memory.polymorphic.allocator.mem
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
_ValueType* allocate(size_t __n) {
|
||||
if (__n > max_size()) {
|
||||
if (__n > __max_size()) {
|
||||
__throw_length_error(
|
||||
"std::experimental::pmr::polymorphic_allocator<T>::allocate(size_t n)"
|
||||
" 'n' exceeds maximum supported size");
|
||||
|
@ -193,7 +193,7 @@ public:
|
|||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
void deallocate(_ValueType * __p, size_t __n) _NOEXCEPT {
|
||||
_LIBCPP_ASSERT(__n <= max_size(),
|
||||
_LIBCPP_ASSERT(__n <= __max_size(),
|
||||
"deallocate called for size which exceeds max_size()");
|
||||
__res_->deallocate(__p, __n * sizeof(_ValueType), alignof(_ValueType));
|
||||
}
|
||||
|
@ -265,10 +265,6 @@ public:
|
|||
void destroy(_Tp * __p) _NOEXCEPT
|
||||
{ __p->~_Tp(); }
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
size_t max_size() const _NOEXCEPT
|
||||
{ return numeric_limits<size_t>::max() / sizeof(value_type); }
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
polymorphic_allocator
|
||||
select_on_container_copy_construction() const _NOEXCEPT
|
||||
|
@ -309,6 +305,10 @@ private:
|
|||
return _Tup(_VSTD::get<_Idx>(_VSTD::move(__t))..., resource());
|
||||
}
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
size_t __max_size() const _NOEXCEPT
|
||||
{ return numeric_limits<size_t>::max() / sizeof(value_type); }
|
||||
|
||||
memory_resource * __res_;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: c++experimental
|
||||
// UNSUPPORTED: c++98, c++03
|
||||
|
||||
// <experimental/memory_resource>
|
||||
|
||||
// template <class T> class polymorphic_allocator
|
||||
|
||||
// EXTENSION
|
||||
// std::size_t polymorphic_allocator<T>::max_size() const noexcept
|
||||
|
||||
#include <experimental/memory_resource>
|
||||
#include <type_traits>
|
||||
#include <cassert>
|
||||
|
||||
#include "test_memory_resource.hpp"
|
||||
|
||||
namespace ex = std::experimental::pmr;
|
||||
|
||||
template <std::size_t S>
|
||||
std::size_t getMaxSize() {
|
||||
using T = typename std::aligned_storage<S>::type;
|
||||
static_assert(sizeof(T) == S, "Required for test");
|
||||
return ex::polymorphic_allocator<T>{}.max_size();
|
||||
}
|
||||
|
||||
template <std::size_t S, std::size_t A>
|
||||
std::size_t getMaxSize() {
|
||||
using T = typename std::aligned_storage<S, A>::type;
|
||||
static_assert(sizeof(T) == S, "Required for test");
|
||||
return ex::polymorphic_allocator<T>{}.max_size();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
using Alloc = ex::polymorphic_allocator<int>;
|
||||
using Traits = std::allocator_traits<Alloc>;
|
||||
const Alloc a;
|
||||
static_assert(std::is_same<decltype(a.max_size()), Traits::size_type>::value, "");
|
||||
static_assert(noexcept(a.max_size()), "");
|
||||
}
|
||||
{
|
||||
constexpr std::size_t Max = std::numeric_limits<std::size_t>::max();
|
||||
assert(getMaxSize<1>() == Max);
|
||||
assert(getMaxSize<2>() == Max / 2);
|
||||
assert(getMaxSize<4>() == Max / 4);
|
||||
assert(getMaxSize<8>() == Max / 8);
|
||||
assert(getMaxSize<16>() == Max / 16);
|
||||
assert(getMaxSize<32>() == Max / 32);
|
||||
assert(getMaxSize<64>() == Max / 64);
|
||||
assert(getMaxSize<1024>() == Max / 1024);
|
||||
|
||||
assert((getMaxSize<6, 2>() == Max / 6));
|
||||
assert((getMaxSize<12, 4>() == Max / 12));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue