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

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

Сообщение Anonymous »

Следующий код выдает ошибку, указывающую, что x имеет значение, хотя оно должно быть пустым:

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

#include 
#include 
#include 
#include 
#include 

void f() {
for (auto x : std::initializer_list({std::nullopt})) {
if (x.has_value()) throw std::runtime_error("Wrong");
std::stacktrace::current();
}
}

int main() {
std::println("Start");
auto b = new bool(true);
try {
f();
} catch (...) {
std::println("Exception");
}
delete b;
std::println("Stop");
}
Godbolt: https://godbolt.org/z/MxW6317fz
Дополнительная информация:
  • Это происходит только при создании сборки «Релиз», а не для сборок «Отладка».
  • Это происходит независимо от подключенного отладчика.
  • Это происходит только при выделении кучи (

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

    new bool
    , make_unique, ...), но не при выделении стека в одном и том же месте.
  • Мне не удалось еще больше сократить код. В частности, это должен быть цикл, он должен использовать std::initializer_list, он должен вызывать std::stacktrace::current() и т. д.


Подробнее здесь: https://stackoverflow.com/questions/798 ... ingle-byte
Ответить

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

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

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

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

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