#ifndef SPROUT_DETAIL_CALL_TRAITS_HPP #define SPROUT_DETAIL_CALL_TRAITS_HPP #include #include namespace sprout { namespace detail { template struct ct_impl_1 { public: typedef T const& param_type; }; template struct ct_impl_1 { public: typedef T const param_type; }; template struct ct_impl { public: typedef T const& param_type; }; template struct ct_impl { public: typedef typename sprout::detail::ct_impl_1::param_type param_type; }; template struct ct_impl { public: typedef T const param_type; }; template struct call_traits { public: typedef T value_type; typedef T& reference; typedef T const& const_reference; typedef typename sprout::detail::ct_impl< T, std::is_pointer::value, std::is_arithmetic::value >::param_type param_type; }; template struct call_traits { typedef T& value_type; typedef T& reference; typedef T const& const_reference; typedef T& param_type; }; } // namespace detail } // namespace sprout #endif // #ifndef SPROUT_DETAIL_CALL_TRAITS_HPP