GCC 3.0 current behavior is: template <> int Y<int>::m; produces a reference without storage allocation. template <typename Z> int Y<int>::m; creates a common symbol. David