https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86703
Nicolas Lesser <blitzrakete at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |blitzrakete at gmail dot com --- Comment #1 from Nicolas Lesser <blitzrakete at gmail dot com> --- Here's another reduce example.: struct X {}; template <auto> using Auto = X; template <typename T> constexpr Auto<(T(), 0)> match() { return {}; } X x = match<int>(); Without ", 0" the example compiles. Error message: main.cpp:5:18: error: no matching function for call to ‘match<int>()’ X x = match<int>(); ^ main.cpp:4:48: note: candidate: ‘template<class T> constexpr Auto<(T(), 0)> match()’ template <typename T> constexpr Auto<(T(), 0)> match() { return {}; } ^~~~~ main.cpp:4:48: note: template argument deduction/substitution failed: main.cpp: In substitution of ‘template<auto <anonymous> > using Auto = X [with auto <anonymous> = ((void)0, 0)]’: main.cpp:4:48: required by substitution of ‘template<class T> constexpr Auto<(T(), 0)> match() [with T = int]’ main.cpp:5:18: required from here main.cpp:4:48: error: integral expression ‘((void)0, 0)’ is not constant main.cpp:4:48: error: trying to instantiate ‘template<auto <anonymous> > using Auto = X’