OSDN Git Service

2010-02-21 Paolo Carlini <paolo.carlini@oracle.com>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 21 Feb 2010 19:55:17 +0000 (19:55 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 21 Feb 2010 19:55:17 +0000 (19:55 +0000)
* 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

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/complex
libstdc++-v3/include/tr1/complex
libstdc++-v3/include/tr1_impl/complex
libstdc++-v3/testsuite/26_numerics/complex/dr781_dr1137.cc [moved from libstdc++-v3/testsuite/26_numerics/complex/dr781.cc with 72% similarity]

index a9ccd8a..4a5f342 100644 (file)
@@ -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.
index 4c0d3fb..6d3097e 100644 (file)
@@ -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
 
index 3ed1eb9..063112b 100644 (file)
@@ -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;
index 615fe18..ac420bf 100644 (file)
@@ -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(); }
@@ -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()