Как сравнить тип возврата лямбда-функции в C ++? - PullRequest
2 голосов
/ 27 сентября 2019

Я пытался выяснить тип возврата лямбда-выражения, чтобы узнать, возвращает ли функция void или нет.

Моя первая мысль использовала std::invoke_result, однако этоне работает должным образом, так как он не работает с std::is_same, который ожидает два типа.

Вот что я пытался

auto lamb = [] ( int x ) { cout << x << endl; };
is_same<(invoke_result<decltype(lamb),int>),void>;

Ошибка:

 trabapply2.cc:32:50: error: template argument 1 is invalid
 is_same<(invoke_result<decltype(lamb),int>),void>;

Есть предложения?

1 Ответ

2 голосов
/ 27 сентября 2019

Вы должны удалить лишние скобки около invoke_result, получить type от invoke_result и value от is_same.например,

is_same<invoke_result<decltype(lamb), int>::type, void>::value // gives true or false

или

is_same_v<invoke_result_t<decltype(lamb), int>, void> // since C++17

LIVE

...