https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103110
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Fedor Chelnokov from comment #4) > Actually you changed the example, and if T is void, then T{} is ill-formed. > But I do not see how it relates to the original program. I know I changed the example to show that clang is considering all templated operator auto rather than not considering any of them. This is why I am saying clang is just plain out wrong of the way it handles templated operator auto. class.conv.fct/6 is very explicit about this too: A conversion function template shall not have a deduced return type (10.1.7.4). [ Example: struct S { operator auto() const { return 10; } // OK template<class T> operator auto() const { return 1.2; } // error: conversion function template }; ----- CUT ---- So again clang is wrong.