https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71879
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- Taking the address of Foo::foo<Caller> instantiates it, which results in an error outside the immediate context, so you get an error not a substitution failure. http://stackoverflow.com/a/15261234/981959