Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.74 KB | None | 0 0
  1. template<typename T>
  2. struct LambdaTypes
  3. : public LambdaTypes<decltype(&T::operator())> {
  4. };
  5.  
  6. template<typename TLambda, typename TRet, typename... TArgs>
  7. struct LambdaTypes <TRet(TLambda::*)(TArgs...) const> {
  8. using return_t = TRet;
  9.  
  10. template <size_t n>
  11. struct arg {
  12. using type = std::tuple_element_t<n, std::tuple<TArgs...>>;
  13. };
  14.  
  15. template<size_t n>
  16. using arg_t = typename arg<n>::type;
  17. };
  18.  
  19. int main() {
  20. auto l = [](int x, float) -> int {return x; };
  21.  
  22. LambdaTypes<decltype(l)> x;
  23.  
  24. static_assert(std::is_same<decltype(x)::return_t, int>::value, "");
  25. static_assert(std::is_same<decltype(x)::arg_t<0>, int>::value, "");
  26. static_assert(std::is_same<decltype(x)::arg_t<1>, float>::value, "");
  27.  
  28. return 0;
  29. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement