diff --git a/include/boost/lambda/detail/lambda_traits.hpp b/include/boost/lambda/detail/lambda_traits.hpp index f35fa09..cae0f38 100644 --- a/include/boost/lambda/detail/lambda_traits.hpp +++ b/include/boost/lambda/detail/lambda_traits.hpp @@ -282,6 +282,11 @@ struct const_copy_argument { typedef void type; }; +template<> +struct const_copy_argument { + typedef void type; +}; + // Does the same as const_copy_argument, but passes references through as such template diff --git a/include/boost/lambda/detail/return_type_traits.hpp b/include/boost/lambda/detail/return_type_traits.hpp index d047344..c662daf 100644 --- a/include/boost/lambda/detail/return_type_traits.hpp +++ b/include/boost/lambda/detail/return_type_traits.hpp @@ -20,10 +20,6 @@ namespace boost { namespace lambda { -using ::boost::type_traits::ice_and; -using ::boost::type_traits::ice_or; -using ::boost::type_traits::ice_not; - // Much of the type deduction code for standard arithmetic types // from Gary Powell @@ -78,8 +74,7 @@ template struct return_type_1_prot { public: typedef typename detail::IF< - // is_protectable::value && is_lambda_functor::value, - ice_and::value, is_lambda_functor::value>::value, + is_protectable::value && is_lambda_functor::value, lambda_functor< lambda_functor_base< Act, @@ -113,9 +108,7 @@ namespace detail { // add const to rvalues, so that all rvalues are stored as const in // the args tuple typedef typename detail::IF_type< -// boost::is_reference::value && !boost::is_const::value, - ice_and::value, - ice_not::value>::value>::value, + boost::is_reference::value && !boost::is_const::value, detail::identity_mapping, const_copy_argument // handles funtion and array >::type type; // types correctly @@ -149,11 +142,8 @@ template struct return_type_2_prot { typedef typename detail::IF< -// is_protectable::value && -// (is_lambda_functor::value || is_lambda_functor::value), - ice_and::value, - ice_or::value, - is_lambda_functor::value>::value>::value, + is_protectable::value && + (is_lambda_functor::value || is_lambda_functor::value), lambda_functor< lambda_functor_base< Act, @@ -188,11 +178,8 @@ struct return_type_2_comma typedef typename detail::IF< -// is_protectable >::value && // it is protectable -// (is_lambda_functor::value || is_lambda_functor::value), - ice_and >::value, // it is protectable - ice_or::value, - is_lambda_functor::value>::value>::value, + is_protectable >::value && // it is protectable + (is_lambda_functor::value || is_lambda_functor::value), lambda_functor< lambda_functor_base< other_action,