C ++ <complex> и <complex.h> в одном файле

У меня есть большая база кода, которая использует C ++<complex> заголовок и многиеstd::complex<double> объекты. Но теперь я также хочу использовать пару других библиотек (fftw а такжеspinsfast) которые используют<complex.h>, К сожалению, смешивание этих двух типов комплексов кажется несовместимым с gcc 4.6.1 (предположительно среди других).

Вот минимальный рабочий пример, показывающий ошибку:

// This is what I do for my various complex objects
#include <complex>

// This is one of many things FFTW/spinsfast essentially do
extern "C" {
  #include <complex.h>
}

int main() {
  std::complex<double>(1.0,2.0);
  return 0;
}

И когда я компилирую:

> g++ test.cpp -o test
test.cpp: In function ‘int main()’:
test.cpp:7:8: error: expected unqualified-id before ‘_Complex’
test.cpp:7:8: error: expected ‘;’ before ‘_Complex’

Очевидно, GCC переводитstd::complex<double> в_Complex, который как-то тоже не определен. [Это отлично работает на моем MacBook, который использует Apple LLVM версии 5.1; эта ошибка компилятора происходит в кластере, который мне нужно поддерживать.]

Я даже не могу понять, откуда это происходит; ни один из включаемых файлов в моей установке gcc не имеет "_Complex" - хотя у них есть "_ComplexT". Как мне отладить такие вещи?

Или, если быть более полезным, как мне решить эту ошибку компилятора так, чтобы она работала не только для небольшой частиgccs?

Ответы на вопрос(1)

Ваш ответ на вопрос