Как показано здесь, поведение allocate(0)
не определено.
Итак, что произойдет, если я вызову allocate_at_least(0)
в соответствии со стандартом C++23? Определена ли реализация поведения или она будет рассматриваться как allocate(a_non_zero_value)
?
[allocator.requirements.general]/44 указывает (выделено мной):
Возвращает:
allocation_result<XX::pointer, XX::size_type>{ptr, count}
где ptr — это память, выделенная для массива с числом T, и такой объект создается, но элементы массива не создаются, так что count ≥ n. Если n == 0, возвращаемое значение не указано.
Таким образом, поведение, как и allocate(0)
, не указано.