Как я могу использовать std::result_of для возврата типа функции вместо void
Я пытаюсь получить возвращаемый тип функции, с которой я связываюсь. В этом случае я ожидал увидеть возвращаемый тип GetFactorialResult
(INT).
#include <iostream>
#include <boost/core/demangle.hpp>
#include <typeinfo>
namespace
{
const int testNumber = 10;
int GetFactorialResult(int number)
{
if (number > 1)
{
return number * GetFactorialResult(number - 1);
}
else
{
return 1;
}
}
template <typename Func, typename... Args>
void Submit(Func&& func, Args&&... args)
{
auto boundTask = std::bind(std::forward<Func>(func), std::forward<Args>(args)...);
using ResultType = typename std::result_of<decltype(boundTask)()>::type;
char const * name = typeid( ResultType ).name();
std::cout << boost::core::demangle( name ) << std::endl;
}
}
int main()
{
Submit([](int number)
{
GetFactorialResult(number);
}, number);
return 0;
}
Выход
void
0
Когда я печатаю тип boundTask
Я вижу, что я ожидаю:
std:: _ Bind<\ main:: {lambda (int) # 1} (int)> (обратная косая черта не существует, но не может понять, как отобразить ее без нее).
Я предполагаю, что я становлюсь недействительным из-за того, что я делаю decltype(boundTask)()
, но если я удаляю скобки, он не может скомпилировать.
У меня есть только доступ к функциям C++11.