variadic_arg_type.hpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Copyright Frank Mori Hess 2009
  2. //
  3. // Use, modification and
  4. // distribution is subject to the Boost Software License, Version
  5. // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt)
  7. // For more information, see http://www.boost.org
  8. #ifndef BOOST_SIGNALS2_DETAIL_VARIADIC_ARG_TYPE_HPP
  9. #define BOOST_SIGNALS2_DETAIL_VARIADIC_ARG_TYPE_HPP
  10. #include <functional>
  11. namespace boost
  12. {
  13. namespace signals2
  14. {
  15. namespace detail
  16. {
  17. template<unsigned, typename ... Args> class variadic_arg_type;
  18. template<typename T, typename ... Args> class variadic_arg_type<0, T, Args...>
  19. {
  20. public:
  21. typedef T type;
  22. };
  23. template<unsigned n, typename T, typename ... Args> class variadic_arg_type<n, T, Args...>
  24. {
  25. public:
  26. typedef typename variadic_arg_type<n - 1, Args...>::type type;
  27. };
  28. template <typename ... Args>
  29. struct std_functional_base
  30. {};
  31. template <typename T1>
  32. struct std_functional_base<T1>
  33. {
  34. typedef T1 argument_type;
  35. };
  36. template <typename T1, typename T2>
  37. struct std_functional_base<T1, T2>
  38. {
  39. typedef T1 first_argument_type;
  40. typedef T2 second_argument_type;
  41. };
  42. } // namespace detail
  43. } // namespace signals2
  44. } // namespace boost
  45. #endif // BOOST_SIGNALS2_DETAIL_VARIADIC_ARG_TYPE_HPP