------- Comment #4 from redi at gcc dot gnu dot org 2010-06-15 23:21 ------- N.B. it's not necessarily a mistake. If an explicit specialization is defined in another translation unit then the implicit instantiation of the primary template must be suppressed, or you get multiple definitions and an ODR violation.
See pages 197-198 of Vandevoorde & Josuttis for a very similar example and explanation. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44552