re PR libstdc++/56111 ({float,double,long double} complex not accepted anymore)
authorMarc Glisse <marc.glisse@inria.fr>
Wed, 13 Feb 2013 21:58:53 +0000 (22:58 +0100)
committerMarc Glisse <glisse@gcc.gnu.org>
Wed, 13 Feb 2013 21:58:53 +0000 (21:58 +0000)
2013-02-13  Marc Glisse  <marc.glisse@inria.fr>

PR libstdc++/56111
* include/std/complex (complex): Undefine.
* include/c_compatibility/complex.h (complex): Only undefine if
<complex> has been included.
* testsuite/26_numerics/complex/56111.cc: New testcase.

From-SVN: r196034

libstdc++-v3/ChangeLog
libstdc++-v3/include/c_compatibility/complex.h
libstdc++-v3/include/std/complex
libstdc++-v3/testsuite/26_numerics/complex/56111.cc [new file with mode: 0644]

index 338d5d7cae037020c075a427daf6f4983cf804df..c46b95df9b06d3c98d72a9b42e42b8a7fefdac95 100644 (file)
@@ -1,3 +1,11 @@
+2013-02-13  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR libstdc++/56111
+       * include/std/complex (complex): Undefine.
+       * include/c_compatibility/complex.h (complex): Only undefine if
+       <complex> has been included.
+       * testsuite/26_numerics/complex/56111.cc: New testcase.
+
 2013-02-13  François Dumont  <fdumont@gcc.gnu.org>
 
        * include/bits/hashtable_policy.h (_Hash_code_base): Restore
index cf7f72fc6b625d0343b28ba2c09943271ced22a8..be0e82def269a2206b12bb97da48820062a1b600 100644 (file)
 
 #if _GLIBCXX_HAVE_COMPLEX_H
 # include_next <complex.h>
-# undef complex
+# ifdef _GLIBCXX_COMPLEX
+// See PR56111, keep the macro in C++03 if possible.
+#  undef complex
+# endif
 #endif
 
 #ifndef _GLIBCXX_COMPLEX_H
index fe3f2674e160a5d3e290b51a5924bf5e89d8e2ac..e426673993773a037e14d96e99c698980e88da6f 100644 (file)
@@ -44,6 +44,9 @@
 #include <cmath>
 #include <sstream>
 
+// Get rid of a macro possibly defined in <complex.h>
+#undef complex
+
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
diff --git a/libstdc++-v3/testsuite/26_numerics/complex/56111.cc b/libstdc++-v3/testsuite/26_numerics/complex/56111.cc
new file mode 100644 (file)
index 0000000..7db40d1
--- /dev/null
@@ -0,0 +1,36 @@
+// { dg-do compile }
+// { dg-options "-std=c++98" }
+
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/56111
+// In C++03, we try to keep the macro "complex" as long as it does not
+// conflict (std::complex).
+#include <bits/c++config.h>
+#if _GLIBCXX_HAVE_COMPLEX_H
+# include <complex.h>
+#endif
+
+int main()
+{
+#if _GLIBCXX_HAVE_COMPLEX_H
+  double complex x = .5;
+  double complex y = cacos (x);
+  (void)y;
+#endif
+}