Почему std::pair<A,B>
не совпадает с std::tuple<A,B>
? Всегда было странно не быть способным просто подставить друг друга. Они несколько конвертируемые, но есть ограничения.
Я знаю, что std::pair<A,B>
требуется иметь два элемента данных A first
и B second
, поэтому он не может быть просто псевдонимом типа std::tuple<A,B>
. Но моя интуиция говорит, что мы могли бы специализировать std::tuple<A,B>
, то есть кортеж с ровно двумя элементами, чтобы равняться определению того, что стандарт требует std::pair
. А затем перейдем к std::pair
.
Я предполагаю, что это было бы невозможно, так как слишком прямолинейно, чтобы не думать об этом, но это не было сделано в g++ libstdС++, например (я не смотрел исходный код других библиотек). Какова будет проблема этого определения? "Просто", что он нарушит стандартную бинарную совместимость библиотек?