$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: David Abrahams (dave_at_[hidden])
Date: 2005-05-22 21:07:53
Rene Rivera <grafik.list_at_[hidden]> writes:
> Many of the problems that CodeWarrior, and True64, have with the 
> serialization library  stem from the behavior of CW to not call 
> constructors for static data members in one particular class in the 
> library. I've come to think that this is standard conforming behavior.
>
> The serialization library relies on a static member of a template class 
> being constructed at global initialization time to figure out what all 
> the serialized classes are. The problem is that the template class is 
> being instantiated implicitly. Which for most compilers also 
> instantiates any static members of that template class. It's my 
> understanding that this violates 14.7.1.7:
>
> 	"The implicit instantiation of a class template does not cause any 
> static data members of that class to be implicitly instantiated."
>
> Question I have.. Is my understanding correct? Or is this a bug in CW part?
Your understanding is certainly correct.  It's standard practice in
traits templates, for example, to do something like:
template <class T>
struct is_whatever
{
    static T& x;
    template <class U>
    char test(U&);
   
    template <class U>
    char (& test( whatever<U>& ) )[2];
    enum { value = sizeof(test(x)) == 2 };    
};
Nobody ever even writes an initializer for x.
-- Dave Abrahams Boost Consulting www.boost-consulting.com