http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58569
--- Comment #15 from Daniel Krügler <daniel.kruegler at googlemail dot com> --- (In reply to Daniel Krügler from comment #14) Furthermore the name hiding happening here template<typename F, typename R = Requires<Callable<F>>> Function(F); needs to be fixed (it was not in your previous example): template<typename F, typename = Requires<Callable<F>>> Function(F);