https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61182
--- Comment #9 from Daniel Krügler <daniel.kruegler at googlemail dot com> --- (In reply to Jonathan Wakely from comment #7) > And Boost. I have to wonder why their remove_const is so much more > complicated than ours: > > template<typename _Tp> > struct remove_const > { typedef _Tp type; }; > > template<typename _Tp> > struct remove_const<_Tp const> > { typedef _Tp type; }; > > That doesn't need to form a pointer then remove it again, so works with > function types. I don' think that this specialization can - according to the language - remove const qualifiers of function types, because there is no const-qualifier to remove. As far as I remember the core language makes this possible when rewriting the specialization to be one for a function type, as of core wording resolution http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#547