http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45964
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2010-10-11 10:13:08 UTC --- (In reply to comment #0) > template<int a> > template<int b> > const int A< a>::B<b>::template value = A<a>::B<b>::C::value; ^^^^^^^^ Are you sure the 'template' keyword belongs here? GCC accepts it, but Comeau doesn't. value is not a member template specialization, it is a member of a template. The standard specifically says "the keyword template may not be applied to non-template members of class templates" As for the main point of your report, I don't think 'template' is required, because B<b> is not a member template specialization