Неправильный расчет суммы в постоянном выраженииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неправильный расчет суммы в постоянном выражении

Сообщение Anonymous »

Моя программа после переноса на Visual Studio показывает странные результаты. После сокращения я пришел к такому минимально воспроизводимому примеру:

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

consteval auto operator +( auto x, auto&& y ) {
return x += y;
}

struct S {
constexpr operator float() { return 1; }
};

int main() {
return 0 + S{};
}
Я ожидал, что он вернет 1, но в Visual Studio он возвращает просто произвольное число 3422303056, а ассемблерный код предполагает, что это значение вычисляется во время константы. оценка:

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

main    PROC
mov     eax, 1610363728                     ; 5ffc3350H
ret     0
main    ENDP
Онлайн-демо: https://gcc.godbolt.org/z/j7eY4qM1s
программа как-то некорректна?

Подробнее здесь: https://stackoverflow.com/questions/790 ... expression
Ответить

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

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

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

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

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