Ссылочная инициализация и прямое или косвенное связывание

Рассмотрим следующий случай

struct A {
   operator int();
};

int &&x = A();

Спецификация говорит вhttp://eel.is/c++draft/dcl.init.ref#5 о том, является ли ссылочная привязка прямой или косвенной

Во всех случаях, кроме последнего (т. Е. При создании и инициализации временного объекта из выражения инициализатора), говорят, что ссылка связывается непосредственно с выражением инициализатора.

Вышеуказанный случай не соответствует последнему, а второму последнему пулу.

Если T1 или T2 является типом класса, а T1 не связан со ссылкой на T2, пользовательские преобразования рассматриваются ... Результат вызова функции преобразования, как описано для нереферентной инициализации копирования, равен используется для прямой инициализации ссылки.

Поэтому связываниеA() к ссылкекосвенное связывание, Чтобы продолжить, мы вернемся к исходной инициализации снова, теперь с prvalue типаint, пытаясь инициализироватьint&&, Теперь мы получим последнюю пулю, что означаетпрямая привязка.

Итак, что мы можем сказать о привязке ссылки ... она связывает прямо или косвенно? Делает ли это оба, в зависимости от того, какое выражение вы рассматриваете (выражение инициализатора против результата вызова функции преобразования)?

В нашем случае, в частности, параграфы, кажется, говорятмы привязываем непосредственно к выражению инициализатора и косвенно привязываем к результату преобразования в выражении инициализатора, Тем не менее, в главе о спасении перегрузкиhttp://eel.is/c++draft/over.ics.refмы различаем только

Когда параметр ссылочного типа привязывается напрямую ([dcl.init.ref]) к выражению аргумента,Если параметр привязывается непосредственно к результату применения функции преобразования к выражению аргумента,Когда параметр ссылочного типа не связан непосредственно с выражением аргумента,

Для случая, как

void f(int &&);
f(A());

Случай 1 применим, но я уверен, что он не предназначен для применения. У меня такое ощущение, что «Во всех случаях, кроме последнего», предназначено не только для сопоставления с временным созданием, но также со вторым последним маркером или, в качестве альтернативы, со всей ветвью «В противном случае», которая содержит эти два маркера (т.е. «последний» относится к другому уровню в иерархии маркеров). Можете ли вы уточнить?

Ответы на вопрос(0)

Ваш ответ на вопрос