LINUX.ORG.RU

Ошибка компиляции С++ (gcc 4.8)


0

1

В файле qobjectdefs_impl.h на строке

template <int... I, typename... SignalArgs, typename R, typename Function>

gcc ругается:

qobjectdefs_impl.h:499: error: expected '>' before '(' token
     template <int... I, typename... SignalArgs, typename R, typename Function>
                      ^
clang ругается:
qobjectdefs_impl.h:499: error: expected ')'
    template <int... I, typename... SignalArgs, typename R, typename Function>
                     ^
/usr/include/complex.h:49: expanded from macro 'I'
#define I _Complex_I
          ^

соответсвенно в файле complex.h есть такая строка

#define I _Complex_I

с gcc 4.7 - компилируется, c gcc 4.8 - такая хрень

#include <complex.h>
#undef I

проблема решилась, но по-моему не очень хорошее решение


#define I _Complex_I

Это где такой заголовочник? Я уж думал в соревновании most ambiguous definition бессменно лидирует X11/Xlib.h со своими #define Bool int.

Dendy ★★★★★
()
Ответ на: комментарий от lrod
#include <complex.h>
#undef I

Вы правы, это действительно решение некрасивое, искомый #undef I должен стоять в конце <complex.h>. Единственный совет — обернуть этот заголовочник в свой, который включать в собственном коде.

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

это стандартная штука в c99 и решение с undef предлагается в glibc. Лучше смотреть на какие-нибудь плюсовые аналоги для complex

mashina ★★★★★
()

Сишные библиотеки в С++ - это тяжёлое наследие, и использовать их следует только когда других вариантов нет (или они объективно хуже). Для комплексных чисел в С++ есть std::complex, который появился даже раньше чем С99.

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

Это дядьки из комитета по стандартизации тяжёлыми веществами обдалбываются. С одной стороны они добавляют ключевые слова вида _Bool, _Atomic, _Generic чтобы ненароком не допустить конфликта имён в существующем коде, и в то же время они определяют макрос с именем I.

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

мне как раз std::complex и нужен хм... зачем я инклудил complex.h мне не понятно

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