xlC игнорирует опцию для offsetof на POD
Резюме
Я пытаюсь скомпилировать старое приложение C++ на новом AIX 7 с помощью компилятора AIX 11.1. Это приложение использует offsetof на классах не POD.
Я установил опцию langlvl для strict98, а также установил опцию для "offsetnonpod", которая говорит компилятору разрешить смещение в классах, отличных от POD.
Я получаю ту же ошибку, если удаляю настройку offsetnonpod и использую расширенный для langlvl. Похоже, я что-то не так делаю с указанием параметра offsetnonpod, иначе компилятор на самом деле не поддерживает такую функциональность.
Пример кода
#include <iostream>
struct Foo
{
private:
int x;
};
int main()
{
std::cout << offsetof(Foo, x);
return 0;
}
И я строю с этой командой:
xlc++_r -qlanglvl=offsetnonpod -qlanglvl=strict98 test.cpp
И я получаю это:
"test.cpp", line 11.32: 1540-0287 (S) "offsetof" must not be applied to "struct Foo". It is not a POD (plain old data) type.
1 ответ
Опция изменяет сообщение с (S) на (W). Предупреждающее сообщение позволит выполнить компиляцию успешно, а смещение разрешено.
Сначала установите -qlanglvl=strict98, так как эта опция установит -qlanglvl = nooffsetnonpod
xlC -qlanglvl=strict98 -qlanglvl = offsetnonpod a.cpp "a.cpp", строка 11.18: 1540-1281 (W) "offsetof" нельзя применить к "struct Foo". Это не тип POD (обычные старые данные).