diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 39fe5877382..e8ccef0b5eb 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,13 @@ +2013-01-19 Jonathan Wakely + + PR libstdc++/55861 + * include/std/future (_State_base::_S_check(const shared_ptr&)): + Fix return type. + (__basic_future::_M_get_result()): Const qualify. + (shared_future::get()): Likewise. + * testsuite/30_threads/shared_future/members/get.cc: Use const + objects. + 2013-01-16 Jonathan Wakely PR libstdc++/55043 (again) diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future index 2ecf438fc1e..6cccd3d3f2a 100644 --- a/libstdc++-v3/include/std/future +++ b/libstdc++-v3/include/std/future @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2009-2012 Free Software Foundation, Inc. +// Copyright (C) 2009-2013 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 @@ -447,7 +447,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __setter(promise* __prom); template - static bool + static void _S_check(const shared_ptr<_Tp>& __p) { if (!static_cast(__p)) @@ -583,7 +583,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION protected: /// Wait for the state to be ready and rethrow any stored exception __result_type - _M_get_result() + _M_get_result() const { _State_base::_S_check(_M_state); _Result_base& __res = _M_state->wait(); @@ -794,12 +794,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// Retrieving the value const _Res& - get() - { - typename _Base_type::__result_type __r = this->_M_get_result(); - _Res& __rs(__r._M_value()); - return __rs; - } + get() const { return this->_M_get_result()._M_value(); } }; /// Partial specialization for shared_future @@ -838,7 +833,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// Retrieving the value _Res& - get() { return this->_M_get_result()._M_get(); } + get() const { return this->_M_get_result()._M_get(); } }; /// Explicit specialization for shared_future @@ -877,7 +872,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Retrieving the value void - get() { this->_M_get_result(); } + get() const { this->_M_get_result(); } }; // Now we can define the protected __basic_future constructors. diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc b/libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc index 4c8ef822f08..9d2628dff62 100644 --- a/libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc +++ b/libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc @@ -6,7 +6,7 @@ // { dg-require-gthreads "" } // { dg-require-atomic-builtins "" } -// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc. +// Copyright (C) 2009-2013 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 @@ -34,7 +34,7 @@ void test01() bool test __attribute__((unused)) = true; std::promise p1; - std::shared_future f1(p1.get_future()); + const std::shared_future f1(p1.get_future()); std::shared_future f2(f1); p1.set_value(value); @@ -47,7 +47,7 @@ void test02() bool test __attribute__((unused)) = true; std::promise p1; - std::shared_future f1(p1.get_future()); + const std::shared_future f1(p1.get_future()); std::shared_future f2(f1); p1.set_value(value); @@ -60,7 +60,7 @@ void test03() bool test __attribute__((unused)) = true; std::promise p1; - std::shared_future f1(p1.get_future()); + const std::shared_future f1(p1.get_future()); std::shared_future f2(f1); p1.set_value();