1

有一个现有的expected<T,E>类提供这些typedefsoperators

value_type = T
operator *(): expected<T,E>& -> value_type&
              const expected<T,E>& -> const value_type&
              expected<T,E>&& -> value_type&&
              const expected<T,E>&& -> const value_type&&

现在我正在编写这样的函数:

template <typename E> 
/*type*/ Unwrap(E&& e)
{
    return e.has_value() ? /*what*/
        : throw e.error();
}

我应该在评论区放什么?
我试过了auto&&*e它收到了一个excepted&&但返回了一个value_type&
我也试过std::forward,但它甚至无法编译。

我应该怎么做?

4

1 回答 1

2

您可以decltype(auto)用作返回类型:

#include <utility>

template<typename E> 
decltype(auto) Unwrap(E&& e) {
  return e.has_value() ? *std::forward<E>(e)
    : throw e.error();
}
于 2021-12-25T11:50:43.033 回答