Web search shows that -Wmaybe-uninitialized is an imprecise check, and  that 
boost::optional is already a known sore spot, but I wanted to pass  along this 
small test case in case the warning's owner wanted to do  further improvements. 
 We solved our one grumpy instance with auto x =  make_optional(0, ...);.  
Something about the loop + conditional +  O1/O2/O3 optimization triggers the 
false positive.  Thanks!   -Jason

//==============================================================================
// g++ -c sample.cc -O2 -Wall -Werror
// gcc 6.1/6.2 and boost 1.61/1.62
#include <stdio.h>
#include <boost/optional/optional.hpp>
int main() {
  boost::optional<int> value;
  for (int x(0); x < 3; ++x) {
    if (random() & 1)
      value = x;
  }
  if (value != boost::none) {
    int result = value.get();
    printf("%d\n", result); // error: '*((void*)& value +4)' may be used 
uninitialized
  }
}
//==============================================================================

Reply via email to