Я пытаюсь запустить пример оператора alignof.
#include <iostream>
struct Empty {};
struct Foo {
int f2;
float f1;
char c;
};
int main()
{
std::cout << "alignment of empty class: " << alignof(Empty) << '\n'
<< "alignment of pointer : " << alignof(int*) << '\n'
<< "alignment of char : " << alignof(char) << '\n'
<< "alignment of Foo : " << alignof(Foo) << '\n' ;
}
Когда я компилирую его с помощью gcc (g ++ -std = c ++ 11 alignof.cpp), я не получаю ошибок.
Но когда я компилирую его с помощью icc (icpc -std = c ++ 11 alignof.cpp), я получаю следующие ошибки, и я не знаю почему:
cenas.cpp(13): error: type name is not allowed
std::cout << "alignment of empty class: " << alignof(Empty) << '\n'
^
cenas.cpp(13): error: identifier "alignof" is undefined
std::cout << "alignment of empty class: " << alignof(Empty) << '\n'
^
cenas.cpp(14): error: type name is not allowed
<< "alignment of pointer : " << alignof(int*) << '\n'
^
cenas.cpp(14): error: expected an expression
<< "alignment of pointer : " << alignof(int*) << '\n'
^
cenas.cpp(15): error: type name is not allowed
<< "alignment of char : " << alignof(char) << '\n'
^
cenas.cpp(16): error: type name is not allowed
<< "alignment of Foo : " << alignof(Foo) << '\n' ;
Я запускаю код на той же машине и меняю компиляторы командой module.
Как можно определить оператор alignof?
Различные компиляторы по-разному поддерживают новые языковые функции, представленные в 2011 году.
В соответствии с этот стол, Компилятор Intel пока не поддерживает alignof
,
Других решений пока нет …