https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69098
Bug ID: 69098 Summary: Member function template flagged with 'is not a function template' Product: gcc Version: unknown URL: http://melpon.org/wandbox/permlink/DShqHOBBMDx3X0H2 Status: UNCONFIRMED Keywords: rejects-valid Severity: minor Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: hir...@trash-mail.com Target Milestone: --- GCC HEAD on Wandbox rejects the code I pasted below, while Clang accepts it without errors. Link: http://melpon.org/wandbox/permlink/DShqHOBBMDx3X0H2 I also have a local TDM-GCC 5.1.0 (DW2) installation which gives the same error message for my original code, but for some reason the bug doesn’t trigger on Wandbox’s 5.1.0 with the minimal testcase I’ve extracted. /*-- Code --*/ template<typename> struct SpecPerType; class Specializer { public: template<bool> void MbrFnTempl() //Must be a template { } template<unsigned> struct InnerClassTempl { //Had to be a template whenever I tested for it static void InnerMemberFn(); }; void Trigger() { InnerClassTempl<0u>::InnerMemberFn(); } }; template<> struct SpecPerType<Specializer> { using FnType = void (Specializer::*)(); template<bool P> static constexpr FnType SpecMbrFnPtr = &Specializer::template MbrFnTempl<P>; }; template<bool> constexpr SpecPerType<Specializer>::FnType SpecPerType<Specializer>::SpecMbrFnPtr; //Just a formalism template<unsigned X> void Specializer::InnerClassTempl<X>::InnerMemberFn() { using Spec = SpecPerType<Specializer>; typename Spec::FnType ErrorSite = Spec::template SpecMbrFnPtr<true>; //ErrorSite would get called next in the original code //(this should result in a call to MbrFnTempl) } int main() { }