Неопределенное поведение разрешено в ConstexPR - ошибка компилятора?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Неопределенное поведение разрешено в ConstexPR - ошибка компилятора?

Сообщение Anonymous »

Насколько я понимаю,: < /p>

Подписанный целочисленный переполнение в C ++ является неопределенным поведением < /li>
Постоянные выражения не позволяют содержать неопределенное поведение. />

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

template struct S { };

template
S f()
{
return S();
}

int main(int, char **)
{
f();
return 0;
}
< /code>
Однако теперь я пробую следующее: < /p>
#include 

template struct S { };

template
S g()
{
return S();
}

int main(int, char **)
{
g();
return 0;
}
< /code>
Каждый из G ++, Clang и MSVC с радостью составьте это, несмотря на то, что < /p>

Поведение не определена, если | m |, | n | или наименьшее количество кратных
| m | и | n | не представлен как значение типа
std::common_type_t
.

( источник: https://en.cppreference.com/w/cpp/numeric/lcm)
это ошибка во всех трех компиляторах? Или Cppreference неправильно, что поведение LCM не определена, если оно не может представлять результат?

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

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

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

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

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

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

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