http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52432
--- Comment #4 from Paolo Carlini <paolo.carlini at oracle dot com> 2012-02-29 13:51:03 UTC --- Admittedly, though, the error which we currently produce for decltype32 isn't optimal, ie: decltype32.C: In substitution of ‘template<class T> decltype (make_array(il)) make_array(const T&) [with T = int]’: decltype32.C:11:23: required from here decltype32.C:5:6: error: ‘make_array’ was not declared in this scope decltype32.C:5:6: note: suggested alternative: decltype32.C:5:6: note: ‘make_array’ decltype32.C: In function ‘int main()’: decltype32.C:11:23: error: no matching function for call to ‘make_array(int)’ decltype32.C:11:23: note: candidate is: decltype32.C:5:6: note: template<class T> decltype (make_array(il)) make_array(const T&) decltype32.C:5:6: note: substitution of deduced template arguments resulted in errors seen above Granted, we don't recurse, but saying that 'make_array' was not declared and then suggesting 'make_array', ehm ;)