У меня есть следующий код C++:
Код: Выделить всё
#include
template class MyClass;
template class MyClass {};
int main() { MyClass obj; }
Используя Clang 16 на моем MacBook M1, это успешно компилируется. Но при использовании Clang 16 в Linux (x86 или ARM) не удается скомпилировать следующую ошибку:
Код: Выделить всё
foo.cpp:4:33: error: implicit instantiation of undefined template 'MyClass'
int main() { MyClass obj; }
^
foo.cpp:2:29: note: template is declared here
template class MyClass;
^
1 error generated.
Я прочитал вопрос «long long int против long int против int64_t в C++», но в этой теме речь идет о сравнении разных компиляторов (GCC против MSVC), тогда как в данном случае это один и тот же компилятор (Clang 16) на той же архитектуре (64-битный ARM или 64-битный x86, как упоминалось выше), но просто разные операционные системы (Linux и Linux). macOS).
Почему macOS позволяет использовать long long для шаблона int64_t, а Linux — нет?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... nd-int64-t