]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
complex (pow(const complex<>&, int)): Enable in C++11 mode too.
authorPaolo Carlini <paolo@gcc.gnu.org>
Thu, 25 Jul 2013 21:24:07 +0000 (21:24 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 25 Jul 2013 21:24:07 +0000 (21:24 +0000)
2013-07-25  Paolo Carlini  <paolo.carlini@oracle.com>

* include/std/complex (pow(const complex<>&, int)): Enable in
C++11 mode too.
* testsuite/26_numerics/complex/dr844.cc: Adjust.
* doc/xml/manual/intro.xml: Update.

From-SVN: r201253

libstdc++-v3/ChangeLog
libstdc++-v3/doc/xml/manual/intro.xml
libstdc++-v3/include/std/complex
libstdc++-v3/testsuite/26_numerics/complex/dr844.cc

index df3698fbf7a73913090bb14281e1cbb7d6cd3cb6..ac2cb45ba07dc15b21c292d1ddea84c4ea7440e9 100644 (file)
@@ -1,11 +1,18 @@
+2013-07-25  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * include/std/complex (pow(const complex<>&, int)): Enable in
+       C++11 mode too.
+       * testsuite/26_numerics/complex/dr844.cc: Adjust.
+       * doc/xml/manual/intro.xml: Update.
+
 2013-07-25  Tim Shen  <timshen91@gmail.com>
 
        Add documents and comments.
        * include/bits/regex.h: Documents and comments.
        * include/bits/regex_grep_matcher.h: Likewise.
        * include/bits/regex_grep_matcher.tcc: Likewise.
-       * testsuite/28_regex/iterators/regex_iterator/char/string_position_01.cc:
-       New.
+       * testsuite/28_regex/iterators/regex_iterator/char/
+       string_position_01.cc: New.
 
 2013-07-24  Paolo Carlini  <paolo.carlini@oracle.com>
 
index d4f9dec24b54e2d64390f9299ae43536ff7d6fbd..cb141865780f6c7570de0b43196a8e19081456e7 100644 (file)
@@ -791,12 +791,6 @@ requirements of the license of GCC.
     <listitem><para>Add the overload.
     </para></listitem></varlistentry>
 
-    <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#844">844</link>:
-       <emphasis>complex pow return type is ambiguous</emphasis>
-    </term>
-    <listitem><para>In C++11 mode, remove the pow(complex&lt;T&gt;, int) signature.
-    </para></listitem></varlistentry>
-
     <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#853">853</link>:
        <emphasis>to_string needs updating with zero and one</emphasis>
     </term>
index 7f100a0420d5d51f73ba89fee40de2fb514c8fd6..58edb4f54dda7e1b91f56ab1612194cf59b72113 100644 (file)
@@ -88,11 +88,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   template<typename _Tp> complex<_Tp> log(const complex<_Tp>&);
   /// Return complex base 10 logarithm of @a z.
   template<typename _Tp> complex<_Tp> log10(const complex<_Tp>&);
-#if __cplusplus < 201103L
-  // DR 844.
   /// Return @a x to the @a y'th power.
   template<typename _Tp> complex<_Tp> pow(const complex<_Tp>&, int);
-#endif
   /// Return @a x to the @a y'th power.
   template<typename _Tp> complex<_Tp> pow(const complex<_Tp>&, const _Tp&);
   /// Return @a x to the @a y'th power.
@@ -955,7 +952,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   // 26.2.8/9  pow(__x, __y): Returns the complex power base of __x
   //                          raised to the __y-th power.  The branch
   //                          cut is on the negative axis.
-#if __cplusplus < 201103L
   template<typename _Tp>
     complex<_Tp>
     __complex_pow_unsigned(complex<_Tp> __x, unsigned __n)
@@ -972,8 +968,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       return __y;
     }
 
-  // _GLIBCXX_RESOLVE_LIB_DEFECTS
+  // In C++11 mode we used to implement the resolution of
   // DR 844. complex pow return type is ambiguous.
+  // thus the following overload was disabled in that mode.  However, doing
+  // that causes all sorts of issues, see, for example:
+  //   http://gcc.gnu.org/ml/libstdc++/2013-01/msg00058.html
+  // and also PR57974.
   template<typename _Tp>
     inline complex<_Tp>
     pow(const complex<_Tp>& __z, int __n)
@@ -982,7 +982,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        ? complex<_Tp>(1) / std::__complex_pow_unsigned(__z, -(unsigned)__n)
         : std::__complex_pow_unsigned(__z, __n);
     }
-#endif
 
   template<typename _Tp>
     complex<_Tp>
index d38f9569e124d046a6f9684e75b87eeae065bf4d..8eb72ec5f9b130947d0a9efe720c1fbc756f4006 100644 (file)
 #include <testsuite_hooks.h>
 #include <testsuite_tr1.h>
 
+// In C++11 mode we used to implement the resolution of
 // DR 844. complex pow return type is ambiguous.
+// However, doing that causes all sorts of issues, see, for example:
+//   http://gcc.gnu.org/ml/libstdc++/2013-01/msg00058.html
+// and also PR57974.
 void test01()
 {
   bool test __attribute__((unused)) = true;
@@ -37,9 +41,7 @@ void test01()
   const double       d1 = 1.0;
   const long double ld1 = 1.0l;
 
-  check_ret_type<cmplx_d_type>(std::pow(cmplx_f_type(f1, f1), i1));
-  VERIFY( std::pow(cmplx_f_type(f1, f1), i1)
-         == std::pow(cmplx_d_type(f1, f1), double(i1)) );
+  check_ret_type<cmplx_f_type>(std::pow(cmplx_f_type(f1, f1), i1));
   check_ret_type<cmplx_d_type>(std::pow(cmplx_d_type(d1, d1), i1));
   check_ret_type<cmplx_ld_type>(std::pow(cmplx_ld_type(ld1, ld1), i1));
 }