Здравствуйте, σ, Вы писали:
σ>* В некоторых языках, которые лежат в основе C++, было что-то типа закрытого наследования (discriminated/tagged unions), и Строструп был с этим знаком. Но специально не включил это в C++ (наверное по вредительским соображениям). Могли иметь tagged unions (и pattern matching) в C++ с самого начала. А так пришлось ждать до C++17 чтобы появился хотя бы std::variant
Но в Си этого не было, поэтому и в C++ не попали, т.к. C++ базировался на Си.
Потребовалась пара десятилитий набивания шишек с Си-шным union-ом в C++, чтобы прийти к std::variant.
И, что занимательно, в C++ до сих пор есть место для использования чисто Си-ных union-ов, без дополнительной информации о том, что лежит внутри.
По причине совместимости с Си в C++ auto для вывода типов приспособили только в С++11. Хотя Страуструп писал, что у него была эта идея еще для C with classes, но не решился, т.к. в Си у auto было свое предназначение (даже при том, что в C++ auto не имело смысла).