http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20478
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |UNCONFIRMED Ever Confirmed|1 |0 --- Comment #9 from Jonathan Wakely <redi at gcc dot gnu.org> 2010-12-19 20:55:54 UTC --- 99% of the original code is irrelevant to the parse error. This seems to be a reasonable approximation of the testcase: template<typename T> struct opApi { opApi(const char*, int); }; template<typename T> struct vec { }; typedef int flow; int deDup(int); int pop(int, vec<flow>); int main() { opApi<flow> flowApis[2] = { opApi<flow>("", deDup( pop(0, vec<flow>())), opApi<flow>("", deDup( pop(0, vec<flow>()))) }; } then that can be further reduced to struct opApi { opApi(int); }; struct vec { }; int deDup(vec); int main() { opApi flowApis[2] = { opApi(deDup( vec()), opApi(deDup( vec())) }; } Current releases don't complain about a missing default constructor (presumably they stop after the earlier parse error).