Условное выражение оператора с помощью базового и константного класса не компилируется, почему?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Условное выражение оператора с помощью базового и константного класса не компилируется, почему?

Сообщение Anonymous »

По какой -то причине это не компилируется: < /p>

Код: Выделить всё

#include 

struct X {  };
struct Y : X {  };

int main() {

using CY = const Y;

true ? X() : CY(); // error: different types 'X' and 'const Y'
}
< /code>
Вот правило из стандартного черновика C ++ 20, которое, я думаю, должно применяться в этом случае: < /p>

7.6 .16 Условный оператор [expr.cond]

...

(4.3.3.2) В противном случае, если T2 является базовым классом T1, целевой тип CV1 T2 , где CV1 обозначает CV-квалификаторы
of T1,

...
< /blockquote>
где t2 < /код > будет x 
и t1 - y , поэтому целевой тип, после применения CV1, должен быть: const x , поэтому он должен компилировать. Но я знаю, что правило выше только для определения этой неявной последовательности преобразования может быть сформирована, и сама преобразование может быть плохо сформировано (хотя я не могу думать ни о каком примере такого случая), но все же, возможно, тонкая точка В этой части: < /p>

7.6.16 Условный оператор [expr.cond]

...

Используя этот процесс, определяется, может ли быть сформирована неявная последовательность преобразования со второго операнда
до целевого типа, определенного для третьего операнда, и наоборот.

...
< /blockquote>
завершит это: < /p>
using CX = const X;
true ? CX() : CY(); // compiles
true ? CX() : Y(); // even this compiles

true ? X() : CY(); // according to the rule becomes:
// true ? 'type X here' : 'type const X here'
// which should compile, but doesn't
< /code>
Каждый комментарий есть правда для любого компилятора, что заставляет меня думать, что я где -то ошибается. Но другая возможность состоит в том, что у каждого компилятора ошибка, потому что?: Оператор не так важен, но Idk.

Подробнее здесь: https://stackoverflow.com/questions/794 ... snt-compil
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»