Различные компиляторы используют разные стратегии для возврата структур по значению.Одним из распространенных методов является внутреннее переписывание этого:
struct retval func(int a)
... как это:
void func(struct retval* retval, int a)
Однако небольшие структуры могут быть возвращены в регистрах.Значение std::pair<int, int>
составляет всего 8 байтов, что означает, что в данном контексте он считается малым.
Я подозреваю, что один компилятор выполняет первый, а второй - последний.Что означает, что они не совпадают.
Это неправильно?Не знаю.Я знаю, что libstdc ++ от clang не двоично совместим с gcc.Но в вашей среде оба компилятора, вероятно, видят одну и ту же библиотеку (вы можете проверить это).Насколько я понимаю, двоичная совместимость C ++ между компиляторами, как правило, считается невозможной в реальном мире.Но это может быть теоретически возможно.