
This is the same problem that was worked around (by re-defining unnamed namespace) some time ago. The main template is defined inside unnamed namespace, and this definition is put into PCH. The template is specialized outside PCH. Since this is done in another TU, the unnamed namespace is different, and the system can't match the template and the specialization.
The workaround works for VC71 and, I am pretty sure it worked for VC80 beta. Unfortunately it doesn't seem to work for VC80 express :(
I believe this is a bug in the compiler, since the use of PCH should be transparent. The fact that PCH is created when another TU is compiled is an implementation detail, and should not prevent legal C++ code from being compiled (anybody knows if it's possible to report bugs to Microsoft?).
http://lab.msdn.microsoft.com/productfeedback/ seems to be the place to do such a thing (never done it myself). I can find no reference to this bug of bad unnamed namespace/PCH interaction yet, so maybe we are the first ones to notice such a thing.