https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92011
Bug ID: 92011 Summary: '<anonymous>' may be used uninitialized in this function with std::optional<T>() Product: gcc Version: 9.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: joerg.rich...@pdv-fs.de Target Milestone: --- cat > t.cc <<EOF #include <optional> struct Bar { int size_; Bar( int size ) : size_( size ) {} }; template<class T> Bar get( T const& val ) { return Bar( __builtin_strlen(val) ); } class Foo { int size2_; public: Foo() {} template<class T> Foo( T const& t ) : size2_( get<T>( t ).size_ ) {} }; enum Enum {}; bool parseImpl2( Foo s, Enum* val ) { *val = Enum(); for(;;) { s = "aa"; if( true ) return false; return true; } } template<class T> std::optional<T> parse2( Foo str ) { T res = T(); if( parseImpl2( str, &res ) ) return res; return std::optional<T>(); } Enum transform() { if( auto r = parse2<Enum>( Foo() ) ) return *r; return {}; } EOF gcc -std=c++17 -c -o t.cc.o t.cc -Wall -O1 #### Gives: t.cc: In function 'Enum transform()': t.cc:50:27: warning: '<anonymous>' may be used uninitialized in this function [-Wmaybe-uninitialized] 50 | return std::optional<T>(); | ^