namespace boost { namespace proto { namespace detail { template<typename T> T make(); template<typename T> char check_reference(T &); template<typename T> char (&check_reference(T const &))[2]; template<typename A0, typename A1> struct comma_result { BOOST_PROTO_DECLTYPE_((detail::make<A0>(), detail::make<A1>()), type) }; template<typename A0> struct comma_result<A0, void> { typedef void type; }; template<typename A1> struct comma_result<void, A1> { typedef A1 type; }; template<>
#define UNREF(x) typename boost::remove_reference<x>::type namespace detail { template<typename T> T make(); template<typename T> char check_reference(T &); template<typename T> char (&check_reference(T const &))[2]; template<typename A0, typename A1> struct comma_result { BOOST_PROTO_DECLTYPE_((proto::detail::make<A0>(), proto::detail::make<A1>()), type) }; template<typename A0> struct comma_result<A0, void> { typedef void type; }; template<typename A1> struct comma_result<void, A1> { typedef A1 type; }; template<>