diff --git a/tests/src/unit-allocator.cpp b/tests/src/unit-allocator.cpp index ca215751e..3c719bf26 100644 --- a/tests/src/unit-allocator.cpp +++ b/tests/src/unit-allocator.cpp @@ -14,6 +14,7 @@ using nlohmann::json; #include #include +#include #include #if JSON_HAS_RANGES #include @@ -1073,12 +1074,12 @@ struct sweep_allocator return (std::numeric_limits::max)() / sizeof(T); } - // p may point to a const object when libc++ probes whether construct() is - // usable for copying, which static_cast(p) would not accept - template - void construct(U* p, Args&& ... args) noexcept(noexcept(::new (const_cast(static_cast(p))) U(std::forward(args)...))) + // libc++ probes whether construct() is usable for const objects (when + // checking for trivial copies); this must not be viable then + template::value>::type> + void construct(U* p, Args&& ... args) noexcept(noexcept(::new (static_cast(p)) U(std::forward(args)...))) { - ::new (const_cast(static_cast(p))) U(std::forward(args)...); + ::new (static_cast(p)) U(std::forward(args)...); } template