Update test allocators to be C++11 compliant by making them templates on the pointer type

This commit is contained in:
Christian Mazakas committed 2022-06-01 11:49:09 -07:00
1 parent e7d34a5ab1
commit 0bcc79baab
4 files changed
+91 -68

No files matched your search

+31 -19
View File
@@ -1,5 +1,6 @@
// Copyright 2006-2009 Daniel James.
// Copyright 2022 Christian Mazakas
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -428,16 +429,20 @@ namespace test {
::operator delete((void*)p.ptr_);
}
void construct(T* p, T const& t) { new ((void*)p) T(t); }
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <class... Args> void construct(T* p, BOOST_FWD_REF(Args)... args)
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <class U, class V> void construct(U* p, V const& v)
{
new ((void*)p) T(boost::forward<Args>(args)...);
new ((void*)p) U(v);
}
#else
template <class U, class... Args>
void construct(U* p, BOOST_FWD_REF(Args)... args)
{
new ((void*)p) U(boost::forward<Args>(args)...);
}
#endif
void destroy(T* p) { p->~T(); }
template <class U> void destroy(U* p) { p->~U(); }
size_type max_size() const { return 1000; }
@@ -498,17 +503,20 @@ namespace test {
::operator delete((void*)p.ptr_);
}
void construct(T const* p, T const& t) { new ((void*)p) T(t); }
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <class... Args>
void construct(T const* p, BOOST_FWD_REF(Args)... args)
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <class U> void construct(U* p, U const& t)
{
new ((void*)p) T(boost::forward<Args>(args)...);
new (p) U(t);
}
#else
template <class U, class... Args>
void construct(U* p, BOOST_FWD_REF(Args)... args)
{
new (p) U(boost::forward<Args>(args)...);
}
#endif
void destroy(T const* p) { p->~T(); }
template <class U> void destroy(U* p) { p->~U(); }
size_type max_size() const { return 1000; }
@@ -573,16 +581,20 @@ namespace test {
void deallocate(T* p, std::size_t) { ::operator delete((void*)p); }
void construct(T* p, T const& t) { new ((void*)p) T(t); }
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <class... Args> void construct(T* p, BOOST_FWD_REF(Args)... args)
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <class U, class V> void construct(U* p, V const& v)
{
new ((void*)p) T(boost::forward<Args>(args)...);
new ((void*)p) U(v);
}
#else
template <class U, class... Args>
void construct(U* p, BOOST_FWD_REF(Args)... args)
{
new ((void*)p) U(boost::forward<Args>(args)...);
}
#endif
void destroy(T* p) { p->~T(); }
template <class U> void destroy(U* p) { p->~U(); }
std::size_t max_size() const { return 1000u; }
};