Неправильный расчет суммы в постоянном выражении ⇐ 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

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