Начиная с ответа sth на этот вопрос:
Мне было интересно, как устранить несколько ошибок определения, если следующий код помещен в файл заголовка, включенный несколько раз в разные файлы .cc и связанный вместе:
template <typename T>
class C {
static const int K;
static ostream& print(ostream& os, const T& t) { return os << t;}
};
// general case
template <typename T>
const int C<T>::K = 1;
// specialization
template <>
const int C<int>::K = 2;