https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102804
Bug ID: 102804 Summary: template matching fails w/ false ambiguity on ternary expressions with enums Product: gcc Version: 11.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: rudick at gmail dot com Target Milestone: --- E.g. w/ -std=c++11 #include <iostream> int main() { enum: unsigned int32_t { FOO, BAR } foobar = FOO; std::cout << ((time(nullptr) % 2) ? foobar : 13) << std::endl; } The initial error is: error: ambiguous overload for ‘operator<<’ (operand types are ‘std::ostream’ {aka ‘std::basic_ostream<char>’} and ‘unsigned int’) in gcc9.2 & gcc 11.2.0 gcc7 happily compiles the code. with -Wextra, all 3 versions warn: error: enumerated and non-enumerated type in conditional expression Version: 11.2.0 system: CentOS Linux 7.7.1908 on Intel Xeon command: g++ -Wall -Wextra -std=c++11 20211017-bug.cpp