+2013-01-19 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/55861
+ * include/std/future (_State_base::_S_check(const shared_ptr<T>&)):
+ 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 <jwakely.gcc@gmail.com>
PR libstdc++/55043 (again)
// <future> -*- 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
__setter(promise<void>* __prom);
template<typename _Tp>
- static bool
+ static void
_S_check(const shared_ptr<_Tp>& __p)
{
if (!static_cast<bool>(__p))
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();
/// 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<R&>
/// 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<void>
// Retrieving the value
void
- get() { this->_M_get_result(); }
+ get() const { this->_M_get_result(); }
};
// Now we can define the protected __basic_future constructors.
// { 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
bool test __attribute__((unused)) = true;
std::promise<int> p1;
- std::shared_future<int> f1(p1.get_future());
+ const std::shared_future<int> f1(p1.get_future());
std::shared_future<int> f2(f1);
p1.set_value(value);
bool test __attribute__((unused)) = true;
std::promise<int&> p1;
- std::shared_future<int&> f1(p1.get_future());
+ const std::shared_future<int&> f1(p1.get_future());
std::shared_future<int&> f2(f1);
p1.set_value(value);
bool test __attribute__((unused)) = true;
std::promise<void> p1;
- std::shared_future<void> f1(p1.get_future());
+ const std::shared_future<void> f1(p1.get_future());
std::shared_future<void> f2(f1);
p1.set_value();