Если заголовок неясен, код должен помочь уточнить:
// .h file
template<class T> class DF_Vector3
{
public:
T x, y, z;
static const DF_Vector3 ZERO;
DF_Vector3() {}
DF_Vector3( T F );
DF_Vector3( T X, T Y, T Z );
};
typedef DF_Vector3<DF_FLOAT> DF_Vector3F;
// .cpp file
template<> const DF_Vector3F DF_Vector3F::ZERO( 0.0f, 0.0f, 0.0f ); // ERROR: Explicit specialization of 'ZERO' after instantiation
Компилятор впоследствии ссылается на другое место, где есть ссылка на DF_Vector3F :: ZERO, и заявляет: «Здесь сначала требуется неявная реализация.
Компилятор Visual Studio 2010, похоже, не против этого. Однако компилятору Apple CLANG (LLVM) это не нравится (он жалуется).
Есть ли способ это исправить? Спасибо.