aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorPaolo Carlini <paolo@gcc.gnu.org>2013-07-25 21:24:07 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2013-07-25 21:24:07 +0000
commit4e30cb71f94c2874b93f2c27a839d816e11f81e5 (patch)
treea039de12bfd4eeff34cc614e672b47db2b9744e7 /libstdc++-v3
parent41a7c2158dd2e6a2e34fe11b0c147eac4b760850 (diff)
downloadgcc-4e30cb71f94c2874b93f2c27a839d816e11f81e5.zip
gcc-4e30cb71f94c2874b93f2c27a839d816e11f81e5.tar.gz
gcc-4e30cb71f94c2874b93f2c27a839d816e11f81e5.tar.bz2
complex (pow(const complex<>&, int)): Enable in C++11 mode too.
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
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog11
-rw-r--r--libstdc++-v3/doc/xml/manual/intro.xml6
-rw-r--r--libstdc++-v3/include/std/complex11
-rw-r--r--libstdc++-v3/testsuite/26_numerics/complex/dr844.cc8
4 files changed, 19 insertions, 17 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index df3698f..ac2cb45 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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>
diff --git a/libstdc++-v3/doc/xml/manual/intro.xml b/libstdc++-v3/doc/xml/manual/intro.xml
index d4f9dec..cb14186 100644
--- a/libstdc++-v3/doc/xml/manual/intro.xml
+++ b/libstdc++-v3/doc/xml/manual/intro.xml
@@ -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>
diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex
index 7f100a0..58edb4f 100644
--- a/libstdc++-v3/include/std/complex
+++ b/libstdc++-v3/include/std/complex
@@ -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>
diff --git a/libstdc++-v3/testsuite/26_numerics/complex/dr844.cc b/libstdc++-v3/testsuite/26_numerics/complex/dr844.cc
index d38f956..8eb72ec 100644
--- a/libstdc++-v3/testsuite/26_numerics/complex/dr844.cc
+++ b/libstdc++-v3/testsuite/26_numerics/complex/dr844.cc
@@ -22,7 +22,11 @@
#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));
}