http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55002
Daniel Krügler <daniel.kruegler at googlemail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |daniel.kruegler at | |googlemail dot com --- Comment #2 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2012-10-20 20:24:19 UTC --- Your issue looks invalid to me, because you are never providing a pointer to function declarator. Lets look first at your simplified example: auto (*ff) -> int (int) This would be an invalid function declarator, because there is (a) no parameter list and (b) the return type is a function type int(int), which is never possible. I can only assume you mean int f(auto (*ff)(int) -> int) { return ff(1); } and this is accepted. A similar defect is in your original code, where the only valid form would be template<class T, size_t N> size_t apply (const T (&A)[N], auto (*f)(const T (&)[N]) -> size_t) { return f(A); } which is also accepted.