Почему 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С++, например (я не смотрел исходный код других библиотек). Какова будет проблема этого определения? "Просто", что он нарушит стандартную бинарную совместимость библиотек?