
The original case was exemplified by the following example: <quote> template<class U> static void smart_cast_reference(U& u) {} template <typename T> void foo(int c) { smart_cast_reference<int>(c); } Suppose (global) template foo is instantiated in more than one translation unit. Since smart_cast_reference does not have external linkage, not all instances of foo can refer to the same instance of smart_cast_reference<int>, and the ODR is violated. I'm pretty sure there is a name-lookup rule that makes this test case invalid, but I haven't found it yet. (Still looking.) </quote> Note that this NOT what the serialization library is in fact doing. What is typical in that library is: template<class T> class x { static Y y; }; template<class T> Y x:y; and variations of the above. I don't see any relation between this and the original example used above. Robert Ramey