Allow use_future support to compile when exceptions are disabled.
diff --git a/asio/include/asio/impl/use_future.hpp b/asio/include/asio/impl/use_future.hpp
index 5c5bb35..e06c400 100644
--- a/asio/include/asio/impl/use_future.hpp
+++ b/asio/include/asio/impl/use_future.hpp
@@ -36,29 +36,37 @@
inline void promise_invoke_and_set(std::promise<T>& p,
F& f, ASIO_MOVE_ARG(Args)... args)
{
+#if !defined(ASIO_NO_EXCEPTIONS)
try
+#endif // !defined(ASIO_NO_EXCEPTIONS)
{
p.set_value(f(ASIO_MOVE_CAST(Args)(args)...));
}
+#if !defined(ASIO_NO_EXCEPTIONS)
catch (...)
{
p.set_exception(std::current_exception());
}
+#endif // !defined(ASIO_NO_EXCEPTIONS)
}
template <typename F, typename... Args>
inline void promise_invoke_and_set(std::promise<void>& p,
F& f, ASIO_MOVE_ARG(Args)... args)
{
+#if !defined(ASIO_NO_EXCEPTIONS)
try
+#endif // !defined(ASIO_NO_EXCEPTIONS)
{
f(ASIO_MOVE_CAST(Args)(args)...);
p.set_value();
}
+#if !defined(ASIO_NO_EXCEPTIONS)
catch (...)
{
p.set_exception(std::current_exception());
}
+#endif // !defined(ASIO_NO_EXCEPTIONS)
}
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
@@ -66,30 +74,61 @@
template <typename T, typename F>
inline void promise_invoke_and_set(std::promise<T>& p, F& f)
{
+#if !defined(ASIO_NO_EXCEPTIONS)
try
+#endif // !defined(ASIO_NO_EXCEPTIONS)
{
p.set_value(f());
}
+#if !defined(ASIO_NO_EXCEPTIONS)
catch (...)
{
p.set_exception(std::current_exception());
}
+#endif // !defined(ASIO_NO_EXCEPTIONS)
}
template <typename F, typename Args>
inline void promise_invoke_and_set(std::promise<void>& p, F& f)
{
+#if !defined(ASIO_NO_EXCEPTIONS)
try
+#endif // !defined(ASIO_NO_EXCEPTIONS)
{
f();
p.set_value();
+#if !defined(ASIO_NO_EXCEPTIONS)
}
catch (...)
{
p.set_exception(std::current_exception());
}
+#endif // !defined(ASIO_NO_EXCEPTIONS)
}
+#if defined(ASIO_NO_EXCEPTIONS)
+
+#define ASIO_PRIVATE_PROMISE_INVOKE_DEF(n) \
+ template <typename T, typename F, ASIO_VARIADIC_TPARAMS(n)> \
+ inline void promise_invoke_and_set(std::promise<T>& p, \
+ F& f, ASIO_VARIADIC_MOVE_PARAMS(n)) \
+ { \
+ p.set_value(f(ASIO_VARIADIC_MOVE_ARGS(n))); \
+ } \
+ \
+ template <typename F, ASIO_VARIADIC_TPARAMS(n)> \
+ inline void promise_invoke_and_set(std::promise<void>& p, \
+ F& f, ASIO_VARIADIC_MOVE_PARAMS(n)) \
+ { \
+ f(ASIO_VARIADIC_MOVE_ARGS(n)); \
+ p.set_value(); \
+ } \
+ /**/
+ ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_PROMISE_INVOKE_DEF)
+#undef ASIO_PRIVATE_PROMISE_INVOKE_DEF
+
+#else // defined(ASIO_NO_EXCEPTIONS)
+
#define ASIO_PRIVATE_PROMISE_INVOKE_DEF(n) \
template <typename T, typename F, ASIO_VARIADIC_TPARAMS(n)> \
inline void promise_invoke_and_set(std::promise<T>& p, \
@@ -123,6 +162,8 @@
ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_PROMISE_INVOKE_DEF)
#undef ASIO_PRIVATE_PROMISE_INVOKE_DEF
+#endif // defined(ASIO_NO_EXCEPTIONS)
+
#endif // defined(ASIO_HAS_VARIADIC_TEMPLATES)
// A function object adapter to invoke a nullary function object and capture
@@ -139,14 +180,18 @@
void operator()()
{
+#if !defined(ASIO_NO_EXCEPTIONS)
try
+#endif // !defined(ASIO_NO_EXCEPTIONS)
{
f_();
}
+#if !defined(ASIO_NO_EXCEPTIONS)
catch (...)
{
p_->set_exception(std::current_exception());
}
+#endif // !defined(ASIO_NO_EXCEPTIONS)
}
private: