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 (обычные старые данные).

Другие вопросы по тегам