Столкнулся с некорректным поведением компилятора Intel(R) C++ Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 18.0.0.124 Build 20170811, платформа сборки Windows 10
Минимальный тестовый пример выдает ошибку:
Intel(R) C++ Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 18.0.0.124 Build 20170811
Copyright (C) 1985-2017 Intel Corporation. All rights reserved.
ConsoleApplication1.cpp
ConsoleApplication1.cpp(3): error: incomplete type is not allowed
class TemplateClass : public Base
^
detected during instantiation of class"TemplateClass<Base> [with Base=SomeClass]" at line 10
compilation aborted for ConsoleApplication1.cpp (code 2)
Сам код:
template <class Base>
class TemplateClass : public Base
{
char t;
};
class SomeClass
{
static TemplateClass <SomeClass> StaticMember; // <--- incomplete type is not allowed
};
int main()
{
SomeClass cls;
return 0;
}
Код корректно собирается в VS2015/2017, xCode 9. Также проверял на ideone.com и godbolt.org.
Здравствуйте, LeonCrew, Вы писали:
LC>Всем привет!
LC>Столкнулся с некорректным поведением компилятора Intel(R) C++ Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 18.0.0.124 Build 20170811, платформа сборки Windows 10
LC>Минимальный тестовый пример выдает ошибку:
Здравствуйте, Alexander G, Вы писали:
AG>Это просто к сведению, или в поиске workaround ?
Больше к workaround, но хотелось бы понять, в чем проблема у данного компилятора на платформе Windows. Т.к. у наших партнеров, который написали код, Intel Compiler C++ for Linux собирает.
В поддержке Intel этот пример точно так же запустили на linux и он собрался, сейчас мы их попросили собрать на windows и они пока молчат.
Здравствуйте, LeonCrew, Вы писали:
LC>Здравствуйте, Alexander G, Вы писали:
AG>>Это просто к сведению, или в поиске workaround ?
LC>Больше к workaround,
Возможно, такое скомпилирует.
Пусть думает, что тип неполный, в объявлении метода неполные типы допускаются.
template <class Base>
class TemplateClass : public Base
{
char t;
};
class SomeClass
{
static TemplateClass <SomeClass>& GetStaticMember();
};
TemplateClass <SomeClass> g_SomeClass_TemplateClass_instance;
TemplateClass <SomeClass>& SomeClass::GetStaticMember()
{
return g_SomeClass_TemplateClass_instance;
}
int main()
{
SomeClass cls;
return 0;
}
template <class Base>
class TemplateClass : public Base
{
char t;
};
class SomeClass
{
static TemplateClass <SomeClass> StaticMember; // <--- incomplete type is not allowed
};
int main()
{
SomeClass cls;
return 0;
}
Здравствуйте, LeonCrew, Вы писали:
LC>Столкнулся с некорректным поведением компилятора Intel(R) C++ Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 18.0.0.124 Build 20170811, платформа сборки Windows 10
LC>Минимальный тестовый пример выдает ошибку:
LC>...
LC>Код корректно собирается в VS2015/2017, xCode 9. Также проверял на ideone.com и godbolt.org.
LC>>Код корректно собирается в VS2015/2017, xCode 9. Также проверял на ideone.com и godbolt.org.
C>Компилятор icc 18 на godbolt.orgошибок не выдает.
Весь казус в том, что у меня тоже 18 версия компилятора и у меня ошибка, как и у моих коллег! Мы все работаем на платформе windows, а наши партнеры, как и приведенный Вами сайт, работает на linux и там ошибки нету. Я уже писал об этом, и поддержка Intel так же проверила код на linux версии, но почему то не реагирует на просьбу проверить на windows.