/*============================================================================= Copyright (c) 2011-2013 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) =============================================================================*/ #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