+2013-04-11 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/56905
+ * libsupc++/exception_ptr.h (copy_exception): Deprecate and
+ move implementation to make_exception_ptr.
+ * include/std/future (_State_base::_M_break_promise): Replace
+ copy_exception with make_exception_ptr.
+ * testsuite/18_support/exception_ptr/move.cc: Likewise.
+ * testsuite/18_support/exception_ptr/rethrow_exception.cc: Likewise.
+ * testsuite/30_threads/future/members/get2.cc: Likewise.
+ * testsuite/30_threads/promise/members/set_exception.cc: Likewise.
+ * testsuite/30_threads/promise/members/set_exception2.cc: Likewise.
+ * testsuite/30_threads/promise/members/set_value2.cc: Likewise.
+ * testsuite/30_threads/shared_future/members/get2.cc: Likewise.
+
2013-04-22 Jason Merrill <jason@redhat.com>
* src/c++11/hashtable_c++0x.cc: Include ext/aligned_buffer.h.
if (static_cast<bool>(__res))
{
error_code __ec(make_error_code(future_errc::broken_promise));
- __res->_M_error = copy_exception(future_error(__ec));
+ __res->_M_error = make_exception_ptr(future_error(__ec));
{
lock_guard<mutex> __lock(_M_mutex);
_M_result.swap(__res);
/// Obtain an exception_ptr pointing to a copy of the supplied object.
template<typename _Ex>
exception_ptr
- copy_exception(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
+ make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
{
__try
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 1130. copy_exception name misleading
/// Obtain an exception_ptr pointing to a copy of the supplied object.
+ /// This function is deprecated, use std::make_exception_ptr instead.
template<typename _Ex>
- exception_ptr
- make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
- { return std::copy_exception<_Ex>(__ex); }
+ exception_ptr
+ copy_exception(_Ex __ex) _GLIBCXX_USE_NOEXCEPT _GLIBCXX_DEPRECATED;
+
+ template<typename _Ex>
+ exception_ptr
+ copy_exception(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
+ { return std::make_exception_ptr<_Ex>(__ex); }
// @} group exceptions
} // namespace std
{
bool test = true;
- std::exception_ptr p1 = std::copy_exception(test);
+ std::exception_ptr p1 = std::make_exception_ptr(test);
std::exception_ptr p2 = std::move(p1);
VERIFY( p1 == 0 );
VERIFY( !(p2 == 0) );
using namespace std;
try {
- rethrow_exception(copy_exception(0));
+ rethrow_exception(make_exception_ptr(0));
} catch(...) {
}
}
using namespace std;
try {
- rethrow_exception(copy_exception(runtime_error("test")));
+ rethrow_exception(make_exception_ptr(runtime_error("test")));
} catch(exception &e) {
VERIFY( typeid(e) == typeid(runtime_error) );
VERIFY( strcmp(e.what(), "test") == 0 );
std::promise<int> p1;
std::future<int> f1(p1.get_future());
- p1.set_exception(std::copy_exception(value));
+ p1.set_exception(std::make_exception_ptr(value));
try
{
(void) f1.get();
std::promise<int&> p1;
std::future<int&> f1(p1.get_future());
- p1.set_exception(std::copy_exception(value));
+ p1.set_exception(std::make_exception_ptr(value));
try
{
(void) f1.get();
std::promise<void> p1;
std::future<void> f1(p1.get_future());
- p1.set_exception(std::copy_exception(value));
+ p1.set_exception(std::make_exception_ptr(value));
try
{
f1.get();
VERIFY( f1.valid() );
- p1.set_exception(std::copy_exception(0));
+ p1.set_exception(std::make_exception_ptr(0));
try
{
std::promise<int> p1;
std::future<int> f1 = p1.get_future();
- p1.set_exception(std::copy_exception(0));
+ p1.set_exception(std::make_exception_ptr(0));
try
{
- p1.set_exception(std::copy_exception(1));
+ p1.set_exception(std::make_exception_ptr(1));
VERIFY( false );
}
catch (std::future_error& e)
try
{
- p1.set_exception(std::copy_exception(0));
+ p1.set_exception(std::make_exception_ptr(0));
VERIFY( false );
}
catch (std::future_error& e)
try
{
- p1.set_exception(std::copy_exception(4));
+ p1.set_exception(std::make_exception_ptr(4));
VERIFY( false );
}
catch (std::future_error& e)
std::shared_future<int> f1(p1.get_future());
std::shared_future<int> f2(f1);
- p1.set_exception(std::copy_exception(value));
+ p1.set_exception(std::make_exception_ptr(value));
try
{
(void) f1.get();
std::shared_future<int&> f1(p1.get_future());
std::shared_future<int&> f2(f1);
- p1.set_exception(std::copy_exception(value));
+ p1.set_exception(std::make_exception_ptr(value));
try
{
(void) f1.get();
std::shared_future<void> f1(p1.get_future());
std::shared_future<void> f2(f1);
- p1.set_exception(std::copy_exception(value));
+ p1.set_exception(std::make_exception_ptr(value));
try
{
f1.get();