Если std::numeric_limits<ptrdiff_t>::max() > std::numeric_limits<size_t>::max()
, вы можете вычислить размер объекта размером std::numeric_limits<size_t>::max()
, вычтя указатель на него из указателя «один за другим».
Если sizeof(T*) > sizeof(size_t)
, у вас может быть достаточно различных указателей для адресации каждого байта внутри этого объекта (например, в случае, если у вас есть массив символов), плюс один для одного конца-конца.
Итак, можно написать реализацию, в которой sizeof
может возвращать std::numeric_limits<size_t>::max()
, и где вы можете получить указатель на один конец элемента такого большого размера.