A specialization of a static member included from multiple cpp files generates multiple definition errors. Example follows, requires 3 files (header and 2 .cpp files which include it). Tested on linux with gcc 4.2.3 (Ubuntu 4.2.3-2ubuntu7) and osx with gcc 4.0.1 (Apple Inc. build 5465).
Compile with: g++ -Wall -g -o a a.cpp b.cpp // a.h struct a{}; template <typename T> struct t { static int const v; }; template <> int const t<a>::v = 42; // a.cpp #include "a.h" // b.cpp #include "a.h" -- Summary: template specialization of static member constants causes multiple definition error Product: gcc Version: 4.2.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rdelashmit at gmail dot com GCC build triplet: i486-linux-gnu GCC host triplet: i486-linux-gnu GCC target triplet: i486-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37656