Внутренняя ошибка компилятора — шаблонный оператор преобразования в выражении switch

Следующий код вызывает сбой компилятора Microsoft:

class Var
{
public:
template <typename T>
operator T () const
{ }
};

int main()
{
Var v;
switch (v)
{ }
}

Мой вопрос: правильный ли код или компилятор должен выдать соответствующую ошибку? Возможно ли однозначное преобразование в целочисленный тип?

5

Решение

Сбой компилятора всегда является ошибкой, этот код не компилируется ни gcc или же clang но оба выдают ошибку без сбоев. За clang ошибка:

error: statement requires expression of integer type ('Var' invalid)
switch (v)
^       ~

gcc предоставляет следующую ошибку:

error: ambiguous default type conversion from 'Var'
switch (v)
^

Также обратите внимание, что выпадение из конца функции, возвращающей значение, является неопределенным поведением в C ++.

Обновить

Добавление:

operator int () const
{ return 0; }

в классе приводит к различным результатам от clang а также gcc,

Увидеть Классы с шаблонными и не шаблонными операторами преобразования в условии оператора switch для обсуждения того, gcc или же clang верно. Моя интерпретация N3323 подразумевает лязг правильно на этом.

Поданный отчет об ошибке

я подал отчет об ошибке для этого ICE, до сих пор нет ответа. Даже если это выглядит как странный случай, это вызывает внутреннюю ошибку компилятора, которая должна быть исправлена.

8

Другие решения


По вопросам рекламы ammmcru@yandex.ru