У меня есть код, похожий на следующий:
#include <boost/optional.hpp>
::boost::optional<int> getitem();
int go(int nr)
{
boost::optional<int> a = getitem();
boost::optional<int> b;
if (nr > 0)
b = nr;
if (a != b)
return 1;
return 0;
}
При компиляции с помощью GCC 4.7.2 с Boost 1.53 используйте следующую команду:
g++ -c -O2 -Стена -DNDEBUG
Выдается следующее предупреждение:
13:3: предупреждение: ‘((void)& b +4)’ может использоваться неинициализированным в этой функции [-Wmaybe-uninitialized]
Судя по всему, корень проблемы лежит в GCC. См. GCC Bugzilla. Кто-нибудь знает обходной путь?
b
не инициализирует все, что находится внутри него, то, во что бы то ни стало,b
в выраженииa != b
может быть неинициализирован. Что, если вы на самом деле инициализируетеb
? Вы все еще получаете предупреждение? - person Shahbaz   schedule 13.02.2014