[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#211586: complex.h misunderstood by g++



Package: g++
Version: 3.3

Use of the C99 header <complex.h> in a C library header that
is then used within a C++ program causes compile/linkage
problems.   This problem was discovered via failing to compile
small examples using the m_get function in the meschach library
version included in Debian.   Here is a small example of some files to 
show a minimal problem testcase:

****************** matfun.h **********************

#include <complex.h>

extern complex** getMat(int x, int y);

***************** matfun.c **********************
#include "matfun.h"

complex** getMat(int x, int y) {
  
  complex** ret;
  complex* v;
  int i;

  ret = (complex**) malloc(x*sizeof(complex*));
  for (i=0; i < x; i++) {
    ret[i] = (complex*) malloc(y*sizeof(complex));
  }
  return ret;
}
**************main.cc ***********************************************

extern "C" {
#include "matfun.h"
}

int main(int argc, char** argv) {

 complex** cp = getMat(5,5);
}

***************************************************************************


Error Msgs show compiler is confused by complex.h, mapping it
onto C++ complex type somehow:

g++ -I. -L. btest.cc -lmf
In file included from /usr/include/c++/3.3/backward/complex.h:31,
                 from matfun.h:2,
                 from btest.cc:3:
/usr/include/c++/3.3/backward/backward_warning.h:32:2: warning: #warning This 
file includes at least one deprecated or antiquated header. Please consider 
using one of the 32 headers found in section 17.4.1.2 of the C++ standard. 
Examples include substituting the <X> header for the <X.h> header for C++ 
includes, or <sstream> instead of the deprecated header <strstream.h>. To 
disable this warning use -Wno-deprecated.
In file included from /usr/include/c++/3.3/complex:49,
                 from /usr/include/c++/3.3/backward/complex.h:32,
                 from matfun.h:2,
                 from btest.cc:3:
/usr/include/c++/3.3/bits/cpp_type_traits.h:71: error: template with C linkage
/usr/include/c++/3.3/bits/cpp_type_traits.h:92: error: template with C linkage
/usr/include/c++/3.3/bits/cpp_type_traits.h:226: error: template with C 
linkage
/usr/include/c++/3.3/bits/cpp_type_traits.h:266: error: template with C 
linkage
/usr/include/c++/3.3/bits/cpp_type_traits.h:278: error: template with C 
linkage
/usr/include/c++/3.3/bits/cpp_type_traits.h:290: error: template with C 
linkage
In file included from /usr/include/c++/3.3/complex:50,
                 from /usr/include/c++/3.3/backward/complex.h:32,
                 from matfun.h:2,
                 from btest.cc:3:

etc. etc.









Reply to: