Правильный ответ: это невозможно.std::size_t
может быть std::uintmax_t
, что означает, что даже std::intmax_t
, самый большой тип, соответствующий стандартам, не может содержать все значения std::size_t
.
В большинстве случаев вам не придется беспокоиться об этом,int
(или long long
) в большинстве случаев будет содержать размер ваших объектов, поэтому вы можете просто привести к нему: static_cast<long long>(sizeof(T))
.Если вы выполняете арифметику указателей, рассмотрите возможность использования std::ptrdiff_t
или не используйте sizeof
и выполните end() - begin()
.