но не для типа результата, а для типа аргумента
В общем случае — никак
Можно попробовать написать шаблонную функцию, принимающую std::function<TR(T, Args...>)> и возвращающую T в качестве результата. И от нее брать invoke_result. Но не факт, что взлетит
Спасибо! Это идея
Оказалось, что эта штука работает, если искусственно преобразовать замыкание к типу std::function, как ты посоветовал: https://stackoverflow.com/questions/9065081/how-do-i-get-the-argument-types-of-a-function-pointer-in-a-variadic-template-cla
В дополнение к вышеизложенному Можно std::function и не юзать, а просто написать пустую аналогичную обертку Только тип ведь нужен Ну а вычленить n-ный элемент из вариадика (Args...) не так сложно
https://www.boost.org/doc/libs/master/libs/callable_traits/doc/html/callable_traits/reference.html#callable_traits.reference.ref_args Главное - не писать такие трейты руками
Хмм, глянул тут мельком - это что за окно в будущее? https://www.boost.org/doc/libs/master/libs/callable_traits/doc/html/callable_traits/reference.html#callable_traits.reference.ref_is_transaction_safe
Это TS, https://en.cppreference.com/w/cpp/language/transactional_memory
Спасибо, но я уже написал свой велосипед на основе того кода, что привел выше
Обсуждают сегодня