fork(3) download
  1. #include <iostream>
  2. #include <tuple>
  3. #include <type_traits>
  4. #include <utility>
  5.  
  6. using namespace std;
  7.  
  8. template <typename R, typename... ARGS>
  9. R function_return(R(*)(ARGS...));
  10.  
  11. template <typename R, typename... ARGS>
  12. std::tuple<ARGS...> function_parameters(R(*)(ARGS...));
  13.  
  14. template <int I, typename T>
  15. using get_type = typename std::conditional_t<(I < 0), std::tuple_element<static_cast<int>(std::tuple_size<T>::value) + I, T>, std::tuple_element<I, T>>::type;
  16.  
  17. template <int I, typename T>
  18. using parameter_type = get_type<I, decltype(function_parameters(std::declval<T>()))>;
  19.  
  20. void bar(bool, char, int) {}
  21.  
  22. int main() {
  23. const parameter_type<-1, decltype(bar)> foo = 13;
  24.  
  25. cout << foo << endl;
  26. }
Success #stdin #stdout 0s 15232KB
stdin
Standard input is empty
stdout
13