https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68957
Bug ID: 68957 Summary: Wrong overload resolution for unscoped enums with fixed underlying type Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: rs2740 at gmail dot com Target Milestone: --- Repro: #include <stdio.h> enum E : char { e }; void f(char) { puts(__PRETTY_FUNCTION__); } void f(int) { puts(__PRETTY_FUNCTION__); } int main() { f(e); // ambiguous } Before DR1601 (http://wg21.link/CWG1601), this should be ambiguous. After DR1601, this should print 'void f(char)' because promotion to the underlying type is preferred over promotion to the promoted underlying type. GCC does neither and prints 'void f(int)' instead.