Для const auto& ref1 = {t1}
Выполняется инициализация списка копий, для ref1
выводится тип std::initializer_list<Test<int>>
, а в элементах процесса копирования копии для его элементов вызывается Test<int>
конструктор копирования.
Примечание : комментарий, содержащийся внутри ref1
, может ввести вас в заблуждение, временная привязка к ref1
не относится к типу Test<int>
, относится к типу std::initializer_list<Test<int>>
.
const Test<int>& ref2 = {t1}
Это в контексте инициализация списка копирования есть специальное правило для привязки ссылки, инициализированной фигурными скобками с одним элементом, привязка ссылки напрямую, временная привязка не введена.
const Test<int>& ref3 = {{t1}}
В этом случае ссылка не привязывается напрямую, {t1}
необходимо преобразовать в тип для привязки ссылки, {t1}
copy инициализировать временную (вызывается Test<int>
конструктор копирования)и этот временный используется для инициализации ref3
.