https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85457
Bug ID: 85457 Summary: enum and auto template parameter mixup Product: gcc Version: 7.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: info at thinkmeta dot de Target Milestone: --- enum class X { Y = 0 }; template <auto> struct D {}; template <class _T, class _D> struct Y; template <class _T, _T _Value> struct Y<_T, D<_Value>> {}; void test() { Y<X, D<X::Y>> y1; Y<int, D<0>> y2; // compile error Y<int, D<1>> y3; // works } For integer values 'auto' is deduced to 'X' if a member with the same value (here 'Y') was used in an instantiation of 'D'.