diff mbox

Add missing 'const' to std::complex primary template

Message ID 20141015132019.GI4197@redhat.com
State New
Headers show

Commit Message

Jonathan Wakely Oct. 15, 2014, 1:20 p.m. UTC
Some more constexpr members that need to be 'const' in C++14.

Tested x86_64-linux, committed to trunk.
diff mbox

Patch

commit acf46fd496a3975e7a6d267791bc41db8c2fc4d0
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Tue Oct 14 18:42:05 2014 +0100

    	* include/std/complex (complex::real, complex::imag): Add const.
    	* testsuite/26_numerics/complex/value_operations/constexpr2.cc: New.

diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex
index bf302c1..6670ed7 100644
--- a/libstdc++-v3/include/std/complex
+++ b/libstdc++-v3/include/std/complex
@@ -144,11 +144,11 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       // DR 387. std::complex over-encapsulated.
       _GLIBCXX_ABI_TAG_CXX11
       constexpr _Tp 
-      real() { return _M_real; }
+      real() const { return _M_real; }
 
       _GLIBCXX_ABI_TAG_CXX11
       constexpr _Tp 
-      imag() { return _M_imag; }
+      imag() const { return _M_imag; }
 #else
       ///  Return real part of complex number.
       _Tp& 
diff --git a/libstdc++-v3/testsuite/26_numerics/complex/value_operations/constexpr2.cc b/libstdc++-v3/testsuite/26_numerics/complex/value_operations/constexpr2.cc
new file mode 100644
index 0000000..e85e211
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/complex/value_operations/constexpr2.cc
@@ -0,0 +1,28 @@ 
+// { dg-do compile }
+// { dg-options "-std=gnu++14" }
+
+// Copyright (C) 2014 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 3, 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 COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <complex>
+
+int main()
+{
+  constexpr std::complex<int> c{};
+  constexpr auto r __attribute__((unused)) = real(c);
+  constexpr auto i __attribute__((unused)) = imag(c);
+}