commit 0b1ce87e22ebcefbc19c9b26d58a1cd2a2654297 Author: Jonathan Wakely Date: Sat Jan 19 21:02:13 2013 +0000 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. diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future index 2ecf438..6cccd3d 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 4c8ef82..9d2628d 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();