Cleanup in result<>

This commit is contained in:
Denis Blank 2018-12-10 17:37:25 +01:00
parent 4c41995316
commit 121265df71

View File

@ -50,10 +50,16 @@ namespace cti {
/// A class which is convertible to any \ref result and that definitly holds no /// A class which is convertible to any \ref result and that definitly holds no
/// value so the real result gets invalidated when this object is passed to it. /// value so the real result gets invalidated when this object is passed to it.
///
/// \since 4.0.0
///
struct empty_result {}; struct empty_result {};
/// A class which is convertible to any result and that definitly holds /// A class which is convertible to any result and that definitly holds
/// an exception which is then passed to the converted result object. /// an exception which is then passed to the converted result object.
///
/// \since 4.0.0
///
class exceptional_result { class exceptional_result {
exception_t exception_; exception_t exception_;
@ -117,14 +123,14 @@ public:
/// result.get_exception(); /// result.get_exception();
/// ``` /// ```
/// ///
/// \since 4.0.0
///
template <typename... T> template <typename... T>
class result { class result {
using trait_t = detail::result_trait<T...>; using trait_t = detail::result_trait<T...>;
using surrogate_t = typename trait_t::surrogate_t; using surrogate_t = typename trait_t::surrogate_t;
struct init_arg_t {}; struct init_arg_t {};
template <typename Args>
friend result<detail::traits::unrefcv_t<T>...> make_result(Args&&...);
template <typename... Args, detail::traits::void_t<decltype(trait_t::wrap( template <typename... Args, detail::traits::void_t<decltype(trait_t::wrap(
std::declval<Args>()...))>* = nullptr> std::declval<Args>()...))>* = nullptr>
@ -272,6 +278,8 @@ decltype(auto) get(result<T...>&& result) {
} }
/// Creates a present result from the given values /// Creates a present result from the given values
///
/// \since 4.0.0
template <typename... T, template <typename... T,
typename Result = result<detail::traits::unrefcv_t<T>...>> typename Result = result<detail::traits::unrefcv_t<T>...>>
Result make_result(T&&... values) { Result make_result(T&&... values) {