Я пытаюсь реализовать простую систему, используя шаблонную структуру, код очень прост и прекрасно компилируется с MSVC, но я не могу понять, почему CLANG выдает мне эту ошибку: "lld-link: error: undefined symbol: public: статическая структура FMyStruct const TSpec <1> :: m_struct "
Я компилирую на машине с 64-битной Windows с IDE VisualStudio, но CLANG LLVM в качестве компилятора. Код прекрасно работает с MSVC.
Я упростил свою проблему до минимума, я попытался поместить все в один файл cpp, но безрезультатно. Я также попробовал явную реализацию шаблона.
Я хочу быть совместимым с C ++ 14, без C ++ 17. Одна вещь, которую я попробовал, это сработало, объявив член m_struct как встроенную переменную, но затем я получил это предупреждение: «встроенные переменные являются расширением C ++ 17»
struct FMyStruct
{
const int _p0;
const int _p1;
const int _p2;
};
template< int > struct TSpec {
static constexpr FMyStruct m_struct = { 0, 0, 0 };
};
FMyStruct
Function( int i )
{
return TSpec< 1 >::m_struct;
}
int main()
{
return 0;
}
Результат:
"lld-link : error : undefined symbol: public: static struct FMyStruct const TSpec<1>::m_struct"
Я ожидаю, что компоновщик найдет символ m_struct, поскольку он определен совсем рядом с ним ...
Самое странное, что если я попробую:
int
Function( int i )
{
return TSpec< 1 >::m_struct._p0;
}
программа прекрасно скомпилируется.
Редактировать: Моя версия CLANG - 9.0.0, предварительно собранная распределенная версия для Windows с официального сайта.
clang version 9.0.0 (trunk)
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin