С++ 20 представил свободную функцию std::ssize() как std::ssize() ниже:
template <class C>
constexpr auto ssize(const C& c)
-> std::common_type_t<std::ptrdiff_t,
std::make_signed_t<decltype(c.size())>>;
Кажется, возможная реализация использует static_cast для преобразования возвращаемого значения функции-члена size() класса C в ее подписанный аналог.
Поскольку функция-член size() в C всегда возвращает неотрицательные значения, зачем кому-то хотеть хранить их в знаковых переменных? В случае, если кто-то действительно хочет, это просто static_cast.
Почему std::ssize() введен в С++ 20?