У меня есть общий c код, который выполняет пройденную лямбду и проверяет выходные данные. Я хотел бы, чтобы вспомогательный метод был полностью выведен, но не может найти решение, так как метод возвращает std::optional
, и я хочу, чтобы метод обработки возвращал его базовый тип. Код:
#include <optional>
#include <type_traits>
std::optional<int> dummy() { return {42}; };
template<typename F, typename Ret = std::result_of_t<F(void)>>
static Ret process(const F& f)
{
Ret val{};
if(auto res = f(); res) { val = *res;}
return val;
}
int main()
{
// call
auto result = process(&dummy);
}
result
, конечно, типа std::optional<int>
. Что я должен изменить в своем определении шаблона, чтобы вывести тип возвращаемого процесса в базовый тип std::optional
- int
?