Комментарии 3
Правда, есть совсем немногочисленные исключения (я нашёл только два следующих; если знаете ещё – смело сообщите их в комментариях)
Гарантированный в c++17 Unnamed return value optimization я думаю в этом списке должен быть. Компилируем старый код с -std=c++17 и вдруг начинаем звать меньше конструкторов копирования. Вообще там думаю примеров не 2 и не 3 а гораздо больше, тк даже переход между мажорными версиями компилятора, не то что переход на др. стандарт при компиляции, вносит кучу мелких изменений в поведение.
если определяется пользовательский копирующий конструктор, то допустимо ли класть его в регистр
не разрешено передавать через регистры определённые пользователем копирующие конструкторы
Наверное через регистры передаётся не ctor, а его параметры? Перефразируйте
В 32-битных программах действовало множество соглашений о вызовах, в частности,
cdecl,stdcall,fastcall,thiscallи т.д. В то время программы сильно страдали от проблем с совместимостью.
Здесь проблема была не в 32-бирных системах. А в том что тогда было много компиляторов, и каждый производитель компилятора придумывал своё соглашение вызова функций. Все таки вызов функций это стандарт компилятора а не операционной системы.
И что вы имеете ввиду под страданием от проблем с совместимостью. Когда треть программы откомпилировали в С компиляторе треть в Паскале и ещё треть в Бэйсике. И эти части не могут работать вместе поскольку у их компиляторов разные соглашения вызова функций!

Подробно об ABI для работы с C++