stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Travis Vitek" <Travis.Vi...@roguewave.com>
Subject RE: __rw_and (Was RE: Some internal aliases for __rw_integral_constant?)
Date Wed, 25 Jun 2008 17:56:22 GMT
 

Eric Lemings wrote:
>
>Okay, another proposal for inclusion though this particular utility
>may be a stretch unless you understand variadic templates very well.
>
>	template <bool...>
>	struct __rw_and;
>
>	template <>
>	struct __rw_and<>: std::true_type {};
>
>	template <bool _Bool0, bool... _BoolN>
>	struct __rw_and<_Bool0, _BoolN...>
>	    : _RWSTD_BOOL_CONST (_Bool0 && __rw_and<_BoolN...>::value)
>{};
>
>For example:
>
>	template <class... _TypesT>
>	struct tuple {
>
>	    template <class... _TypesU>
>	    struct __rw_is_compat
>	        : __rw_and<std::is_convertible<_TypesT,
>_TypesU>::value...> {
>
>	        static_assert (sizeof... (_TypesT) == sizeof...
>(_TypesU),
>	                       "tuple sizes must be equal");
>	    };
>
>	};
>

Interesting. I have seen similar utilities, but they usually took two
parameters, so I never really saw them as useful. This, on the other
hand, does seem useful.

I'm assuming you are considering a fallback implementation like I have
for aligned_union when variadic templates aren't supported.

>Here are some quick tests that I tried out on it:
>
>    typedef tuple<char, int, long> T1;
>    std::cout << T1::__rw_is_compat<char, short, int>::value
>              << std::endl;
>
>    std::cout << T1::__rw_is_compat<const char, const int, const
>long>::value
>              << std::endl;
>
>    std::cout << T1::__rw_is_compat<float, int, long>::value
>              << std::endl;
>
>    std::cout << T1::__rw_is_compat<void*, int, long>::value
>              << std::endl;
>
>    // fires the static assertion
>    //std::cout << T1::__rw_is_compat<char, short>::value
>              //<< std::endl;
>
>Might just save that one for later but worth posting at least.  :)
>
>Brad.
>

Mime
View raw message