http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54059
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-07-20 23:14:09 UTC --- This is http://en.wikipedia.org/wiki/Most_vexing_parse The declaration f2 declares a function, it is not a variables definition. To convince yourself, try taking its address: foo* p = &f2;