Комментарии 6
Интересно. Спасибо.
В современном C++ не вижу ни одной причины не писать вот так:
struct Response {
bool error = false;
bool succeeded = false;
std::string data;
};И все вопросы про инициализацию снимаются.
P.S. статья по теме https://habr.com/ru/companies/jugru/articles/469465/ и легендарная гифка https://habrastorage.org/webt/bp/rd/ow/bprdow1rk6jtw5fzpm3bffzirps.gif
Зачем столько часов было тратить на изучение особенностей разных компиляторов? Понятно же, что поля не проинициализированы. Можно быстро исправить и потратить время на размышления о том, как плохо программировать на флагах.
Феерично! Это идеальный пример того как ссылки на "неопределенное поведение" маскируют не понимание не только С++, но вообще основ программирования!
Автору просто по фигу что если одно и тоже значение передавать два раза / скопировать в два поля, причем во второе с инверсией, то получается не два, а четыре возможных значения. По сути это и вызывает наивное удивление и жалобы о том что в С++ все очень неопределенно. Только при чем здесь С++. Если bool скопировать два раза то возможны ЧЕТЫРЕ варианта, чему здесь удивляться, при чем здесь С++ ?
правильно будет что-то на базе:
struct Response {
std::optinal<bool> error;
std::optinal<bool> succeeded;
};или
struct Response {
bool error -> !res;
bool succeeded -> res;
privite:
std::optinal<bool> res;
};Но чтобы сделать правильно это же напрягаться-думать надо, гораздо проще жаловаться на неопределенное поведение и получать зарплату за бесконечное исправление чужих, а потом и собственных багов и лавры мастера по борьбе с UB.
По моему, с точки зрения архитектуры, структура передаваемого значения в виде
{ "error": false, "succeeded": true }
означает, что проектировщики этого закладывали, что возможны ситуации, когда оба значения равны true или false, просто их надо правильно обрабатывать.
Если была необходимость устанавливать в true только одного поля, передавалось бы только одно поле.
Ожидал продолжения, что исправление завалило прод с убытками на миллиарды евро

Один баг в проде, после которого я всерьёз воспринимаю неопределённое поведение