For the purposes of determining
whether an expression
E is a core constant expression,
the evaluation of a call to a member function of
std::allocator<T>
as defined in
[allocator.members], where
T is a literal type,
does not disqualify
E from being a core constant expression,
even if the actual evaluation of such a call
would otherwise fail the requirements for a core constant expression
. Similarly, the evaluation of a call to
std::construct_at or
std::ranges::construct_at (
[specialized.construct])
does not disqualify
E
from being a core constant expression unless
the first argument, of type
T*, does not point
to storage allocated with
std::allocator<T> or
to an object whose lifetime began within the evaluation of
E, or
the evaluation of the underlying constructor call
disqualifies
E from being a core constant expression
.