Нет функций "sto {short, unsigned short}" в С++ 11?

С++ 11 вводит удобные функции stoi, stol, stoll, stoul, stoull, stof, stod и stold, которые преобразуют строку в целое число, long, long long, unsigned long, unsigned long long, float, double или long double, соответственно.

Почему нет любви к короткому и неподписанному короткому?

Помимо того факта, что упущение меня раздражает из принципа, я обнаружил, что мне приходится неудобно работать в таких ситуациях:

#include <string>

struct S
{
    S(short);
};

int main()
{
    S s{std::stoi("4")};
}

Ошибка:

test.cpp: In function 'int main()':
test.cpp:10:23: error: narrowing conversion from 'int' to 'short int' inside { } [-fpermissive]

Я хотел бы вместо этого написать S s{std::stos("4")};, если только был stos...

Вместо этого мне нужно написать S s{static_cast<short>(std::stoi("4"))};... oh wait, и это тоже не получится, что беззвучно усекает целые числа дольше, чем короткие, в отличие от гипотетической stos функции, которая генерирует исключение, если целое число не вписывается в короткий. Поэтому в основном я вернусь к моим пред-С++ 11 альтернативам stringstreams, boost::lexical_cast и т.д.

РЕДАКТИРОВАТЬ. Поскольку людям, кажется, нелегко найти мой реальный вопрос, почему нет функций stos и stous, чтобы идти вместе с другими

Ответ 1

Догадка: С++ взял функции s-to-xxx из C (возможно, вариант C99) только для совместимости; таких функций не было бы, если бы С++ были разработаны независимо.