diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-02-21 19:55:17 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-02-21 19:55:17 +0000 |
commit | 64e9b516e825dd7e929177d5cfea1e990ce7372a (patch) | |
tree | bad7267e444c4d59597fc04451de59d8097bb362 /libstdc++-v3 | |
parent | 5d733aa0ffed73bdea18f9e409c40f4435b46d35 (diff) | |
download | gcc-64e9b516e825dd7e929177d5cfea1e990ce7372a.tar.gz |
2010-02-21 Paolo Carlini <paolo.carlini@oracle.com>
* include/std/complex (proj): Change return type per DR 1137.
(conj): Copy from tr1_impl, likewise adjust return type.
* include/tr1_impl/complex (conj): Remove.
* include/tr1/complex (conj): Add both overloads.
* testsuite/26_numerics/complex/dr781.cc: Rename to...
* testsuite/26_numerics/complex/dr781_dr1137.cc: ... this, and extend.
* include/tr1_impl/complex (arg): Optimize.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@156940 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 11 | ||||
-rw-r--r-- | libstdc++-v3/include/std/complex | 15 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/complex | 14 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1_impl/complex | 10 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/26_numerics/complex/dr781_dr1137.cc (renamed from libstdc++-v3/testsuite/26_numerics/complex/dr781.cc) | 22 |
5 files changed, 51 insertions, 21 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a9ccd8a1dfa..4a5f342bbb5 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,16 @@ 2010-02-21 Paolo Carlini <paolo.carlini@oracle.com> + * include/std/complex (proj): Change return type per DR 1137. + (conj): Copy from tr1_impl, likewise adjust return type. + * include/tr1_impl/complex (conj): Remove. + * include/tr1/complex (conj): Add both overloads. + * testsuite/26_numerics/complex/dr781.cc: Rename to... + * testsuite/26_numerics/complex/dr781_dr1137.cc: ... this, and extend. + + * include/tr1_impl/complex (arg): Optimize. + +2010-02-21 Paolo Carlini <paolo.carlini@oracle.com> + * testsuite/20_util/is_trivial/requirements/typedefs.cc: New. * testsuite/20_util/is_trivial/requirements/ explicit_instantiation.cc: Likewise. diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex index 4c0d3fbe7db..6d3097e0a1e 100644 --- a/libstdc++-v3/include/std/complex +++ b/libstdc++-v3/include/std/complex @@ -1,7 +1,7 @@ // The template and inlines for the -*- C++ -*- complex number classes. // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -// 2006, 2007, 2008, 2009 +// 2006, 2007, 2008, 2009, 2010 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -1572,13 +1572,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { return __complex_proj(__z); } #endif + // DR 1137. template<typename _Tp> - inline std::complex<typename __gnu_cxx::__promote<_Tp>::__type> + inline typename __gnu_cxx::__promote<_Tp>::__type proj(_Tp __x) - { - typedef typename __gnu_cxx::__promote<_Tp>::__type __type; - return std::proj(std::complex<__type>(__x)); - } + { return __x; } + + template<typename _Tp> + inline typename __gnu_cxx::__promote<_Tp>::__type + conj(_Tp __x) + { return __x; } _GLIBCXX_END_NAMESPACE diff --git a/libstdc++-v3/include/tr1/complex b/libstdc++-v3/include/tr1/complex index 3ed1eb97f67..063112b440b 100644 --- a/libstdc++-v3/include/tr1/complex +++ b/libstdc++-v3/include/tr1/complex @@ -1,6 +1,6 @@ // TR1 complex -*- C++ -*- -// Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2006, 2007, 2008, 2009, 2010 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 @@ -56,7 +56,17 @@ namespace std namespace tr1 { using std::arg; - using std::conj; + + template<typename _Tp> + inline std::complex<_Tp> + conj(const std::complex<_Tp>& __z) + { return std::conj(__z); } + + template<typename _Tp> + inline std::complex<typename __gnu_cxx::__promote<_Tp>::__type> + conj(_Tp __x) + { return __x; } + using std::imag; using std::norm; using std::polar; diff --git a/libstdc++-v3/include/tr1_impl/complex b/libstdc++-v3/include/tr1_impl/complex index 615fe1886f8..ac420bf199c 100644 --- a/libstdc++-v3/include/tr1_impl/complex +++ b/libstdc++-v3/include/tr1_impl/complex @@ -1,6 +1,6 @@ // TR1 complex -*- C++ -*- -// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2007, 2008, 2009, 2010 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 @@ -311,15 +311,11 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 arg(_Tp __x) { typedef typename __gnu_cxx::__promote<_Tp>::__type __type; - return std::arg(std::complex<__type>(__x)); + return std::signbit(__x) ? __type(3.1415926535897932384626433832795029L) + : __type(); } template<typename _Tp> - inline std::complex<typename __gnu_cxx::__promote<_Tp>::__type> - conj(_Tp __x) - { return __x; } - - template<typename _Tp> inline typename __gnu_cxx::__promote<_Tp>::__type imag(_Tp) { return _Tp(); } diff --git a/libstdc++-v3/testsuite/26_numerics/complex/dr781.cc b/libstdc++-v3/testsuite/26_numerics/complex/dr781_dr1137.cc index df7f1e05b3f..145a4b04499 100644 --- a/libstdc++-v3/testsuite/26_numerics/complex/dr781.cc +++ b/libstdc++-v3/testsuite/26_numerics/complex/dr781_dr1137.cc @@ -1,7 +1,7 @@ // { dg-options "-std=gnu++0x" } // 2008-05-22 Paolo Carlini <paolo.carlini@oracle.com> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2010 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 @@ -23,6 +23,7 @@ #include <testsuite_tr1.h> // DR 781. std::complex should add missing C99 functions. +// DR 1137. Return type of conj and proj. void test01() { bool test __attribute__((unused)) = true; @@ -45,12 +46,21 @@ void test01() check_ret_type<cmplx_d_type>(std::proj(c_d1)); check_ret_type<cmplx_ld_type>(std::proj(c_ld1)); - check_ret_type<cmplx_f_type>(std::proj(f1)); - check_ret_type<cmplx_d_type>(std::proj(d1)); - check_ret_type<cmplx_d_type>(std::proj(i1)); + check_ret_type<float>(std::proj(f1)); + check_ret_type<double>(std::proj(d1)); + check_ret_type<double>(std::proj(i1)); VERIFY( std::proj(i1) == std::proj(double(i1)) ); - VERIFY( std::proj(i1) == std::proj(cmplx_d_type(double(i1))) ); - check_ret_type<cmplx_ld_type>(std::proj(ld1)); + check_ret_type<long double>(std::proj(ld1)); + + check_ret_type<cmplx_f_type>(std::conj(c_f1)); + check_ret_type<cmplx_d_type>(std::conj(c_d1)); + check_ret_type<cmplx_ld_type>(std::conj(c_ld1)); + + check_ret_type<float>(std::conj(f1)); + check_ret_type<double>(std::conj(d1)); + check_ret_type<double>(std::conj(i1)); + VERIFY( std::conj(i1) == std::conj(double(i1)) ); + check_ret_type<long double>(std::conj(ld1)); } int main() |