Подтвердить что ты не робот

Clang и __float128 ошибка/ошибка

Я успешно скомпилировал текущую ветвь 3.3 clang. Но тогда компиляция С++ любого файла сбой с ошибкой/ошибкой. Может ли это быть исправлено?

In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/iostream:39:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/ostream:39:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/ios:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/char_traits.h:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/stl_algobase.h:65:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/stl_pair.h:61:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/move.h:57:
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/type_traits:256:39: error: use of
      undeclared identifier '__float128'
    struct __is_floating_point_helper<__float128>
                                      ^
1 error generated.
4b9b3361

Ответ 1

Вы можете исправить это с помощью

CXXFLAGS+="-D__STRICT_ANSI__"

Ответ 2

Я не думаю, что clang поддерживает __float128. Он может быть того же типа, что и long double (который равен 16 байтам в clang), поэтому это может быть простой случай вставки:

#define __float128 long double

или

typedef long double __float128;

где-то в начале вашей цепи включения.

Я не гарантирую, что это сработает, но возможно, и, вероятно, лучше попробовать, а не ждать, пока clang не начнет поддерживать расширения gcc.

Либо это, либо переключиться на gcc, если это опция. Я уверен, что gcc поддерживает все расширения gcc: -)

Ответ 4

Решение состоит в том, чтобы иметь это объявление. Он работает как шарм:

#ifdef __clang__
typedef struct { long double x, y; } __float128;
#endif

Решения с #define не работают из-за ошибки повторной декларации спецификации шаблона.

Конечно, это взломать, и вы должны быть в безопасности. Я хочу, чтобы clang просто для нескольких экспериментов, поэтому он не вызовет никаких проблем.