LINUX.ORG.RU

Про «ошибка: нет декларации «__builtin_types_compatible_p» в этой области видимости» в C++

 ,


1

3

А откуда вылазит сабж, который лечится прописыванием

#include <cmath>
вместо
#include <math.h>
? Старый компилятор? Слишком новый glibc?

Что самое интересное, на эти грабли наступает GCC 5.3.0 при компиляции того же Qt 5.9.2, в то время как в самом исходнике использование

#include <math.h>
прокомментировано так, что это для совместимости с GCC 4.x. В то время как на дворе уже давно GCC 7.x.

★★★★★

Последнее исправление: saahriktu (всего исправлений: 1)

Вчера столкнулся с подобной проблемой на последнем тулчейне для андроид.

Если использовать #include <cstdio>, то ошибка компиляции, связанная с отсутсвием объявления using ::fgetpos; и using ::fsetpos;.
Если заменить на #include <stdio.h>, то все пучком.
Гугель о баге знает еще с лета, но не спешит фиксить.

andreyu ★★★★★
()

Try CrystaX NDK.

anonymous
()

Старый компилятор? Слишком новый glibc?

Или стандарт говорит о cheader вместо header.h?

anonymous
()
Ответ на: комментарий от andreyu

это другая проблема.

и чтоб иметь меньше проблем, то лучше импортить сишные заголовки через

extern "C"
{
namespace std
{
#include <stdio.h>
}
}


потом меньше кода нужно будет менять после фикса.

ну или порядок объявлений поменять, в зависимости от ошибок компиляции.

dzidzitop ★★
()
Последнее исправление: dzidzitop (всего исправлений: 2)
Ответ на: комментарий от dzidzitop

и чтоб иметь меньше проблем, то лучше импортить сишные заголовки через

Ну так себе решение. Возможно оно и оправдано, но слишком уж костыльное.

потом меньше кода нужно будет менять после фикса.

В моем случае все решилось двумя заменами <cstdio> на <stdio.h>.

ну или порядок объявлений поменять, в зависимости от ошибок компиляции.

Дело не в порядке объявления:

ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include/cstdio:107:11: error: no member named 'fgetpos' in the global namespace
  using ::fgetpos;
        ~~^

andreyu ★★★★★
()
Ответ на: комментарий от dzidzitop

и чтоб иметь меньше проблем, то лучше импортить сишные заголовки через

extern "C"
{
namespace std
{
#include <stdio.h>
}
}

А что, стандарт такое разрешает?

utf8nowhere ★★★
()
Ответ на: комментарий от utf8nowhere

смысл простой - подключить сишные заголовочные файлы в код C++ и чтобы контент был задекларирован в namespace std. Код выше скорее всего не скомпилится - нужно экспериментировать.

extern «C» был у Страуструпа, если ты про него.

dzidzitop ★★
()
Последнее исправление: dzidzitop (всего исправлений: 1)
Ответ на: комментарий от d_a

Нет, это UB (20.5.4.2.1).

Я-то в курсе.

Я хотел проверить, знает ли об этом советчик совать что попало в namespace std.

utf8nowhere ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.