------- Comment #8 from mmitchel at gcc dot gnu dot org 2006-08-26 16:53 ------- We do have code to notice use-before-specialization errors. For example:
template <typename T> void f(); void g() { f<int>(); } template <> void f<int>() {} results in an error. However, the code to initialize static variables is not generated until end-of-file, so we do not realize that we are in this situation. (See expand_static_init for the point at which we defer initialization.) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28058