This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[v3] Fix the incomplete implementation of DR 387 issue


Hi,

tested x86_64-linux, committed to mainline.

Paolo.

///////////////
2009-03-10  Paolo Carlini  <paolo.carlini@oracle.com>

	* include/std/complex (operator+(const complex<>&, const _Tp&),
	operator+(const _Tp&, const complex<>&),
	operator-(const complex<>&, const _Tp&),
	operator-(const _Tp&, const complex<>&)): Do not assume real()
	returns a reference (against DR 387).
	* testsuite/26_numerics/complex/dr387_2.cc: New.
Index: include/std/complex
===================================================================
--- include/std/complex	(revision 144753)
+++ include/std/complex	(working copy)
@@ -333,7 +333,7 @@
     operator+(const complex<_Tp>& __x, const _Tp& __y)
     {
       complex<_Tp> __r = __x;
-      __r.real() += __y;
+      __r += __y;
       return __r;
     }
 
@@ -342,7 +342,7 @@
     operator+(const _Tp& __x, const complex<_Tp>& __y)
     {
       complex<_Tp> __r = __y;
-      __r.real() += __x;
+      __r += __x;
       return __r;
     }
   //@}
@@ -363,7 +363,7 @@
     operator-(const complex<_Tp>& __x, const _Tp& __y)
     {
       complex<_Tp> __r = __x;
-      __r.real() -= __y;
+      __r -= __y;
       return __r;
     }
 
@@ -372,7 +372,7 @@
     operator-(const _Tp& __x, const complex<_Tp>& __y)
     {
       complex<_Tp> __r(__x, -__y.imag());
-      __r.real() -= __y.real();
+      __r -= __y.real();
       return __r;
     }
   //@}
Index: testsuite/26_numerics/complex/dr387_2.cc
===================================================================
--- testsuite/26_numerics/complex/dr387_2.cc	(revision 0)
+++ testsuite/26_numerics/complex/dr387_2.cc	(revision 0)
@@ -0,0 +1,31 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+//
+// Copyright (C) 2009 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 2, 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 COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <complex>
+
+// DR 387. std::complex over-encapsulated.
+// http://gcc.gnu.org/ml/gcc/2009-03/msg00264.html
+typedef std::complex<double> C;
+
+C f1(C& c) { return c+1.0; }
+C f2(C& c) { return c-1.0; }
+C f3(C& c) { return 1.0+c; }
+C f4(C& c) { return 1.0-c; }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]