Пример кода компилируется без предупреждения или ошибки в Windows и Linux. Это начинает получать -Wundefined-var-template
предупреждение в XCode 9.
foo.h:
template <typename T>
struct myClass
{
static const char* name;
};
foo.cpp:
#include "foo.h"template<>
const char *myClass<int>::name = "int";
warning: instantiation of variable 'myClass<int>::name' required here, but no definition is available [-Wundefined-var-template]
note: forward declaration of template entity is here
static const char *name;
^
note: add an explicit instantiation declaration to suppress this warning if 'myClass<int>::name' is explicitly instantiated in another translation unit
Что я пробовал, но не получилось:
Добавление следующего кода в заголовочный файл может устранить предупреждение, но код завершается ошибкой во время выполнения.
template<T>
const char *myClass<T>::name = "";
Что сработало в итоге:
foo.h:
template <typename T>
struct myClass
{
static const char* name;
};
template <>
struct myClass<int>
{
static const char* name;
};
foo.cpp:
#include "foo.h"const char *myClass<int>::name = "int";
Других решений пока нет …