Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<typename T>
- struct LambdaTypes
- : public LambdaTypes<decltype(&T::operator())> {
- };
- template<typename TLambda, typename TRet, typename... TArgs>
- struct LambdaTypes <TRet(TLambda::*)(TArgs...) const> {
- using return_t = TRet;
- template <size_t n>
- struct arg {
- using type = std::tuple_element_t<n, std::tuple<TArgs...>>;
- };
- template<size_t n>
- using arg_t = typename arg<n>::type;
- };
- int main() {
- auto l = [](int x, float) -> int {return x; };
- LambdaTypes<decltype(l)> x;
- static_assert(std::is_same<decltype(x)::return_t, int>::value, "");
- static_assert(std::is_same<decltype(x)::arg_t<0>, int>::value, "");
- static_assert(std::is_same<decltype(x)::arg_t<1>, float>::value, "");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement