Boost logo

Boost Users :

Subject: Re: [Boost-users] [Concepts & EnableIf] Is void special?
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2012-03-27 12:02:06


On Tue, 27 Mar 2012, Robert Jones wrote:

> Hi Peeps
> Can anyone cast any light on this...
>
> I want to write function which accepts a single pass range of X's, so something like this
>
> struct X { };
>
> template <typename T>
>     BOOST_CONCEPT_REQUIRES(
>         (( boost::SinglePassRangeConcept<T> )),
>         ( typename boost::enable_if<boost::is_same<typename boost::range_value<T>::type, X>, void>::type ))
>     my_function( const T & range );
>
> Is that a reasonable construction, or is there a better way to say it?
>
> Next, it doesn't seem to work. It does seem to work if the type to which enable_if resolves is anything
> except void, but not for void. Why is this?

Does it only fail if you try to pass something in that is not a range?
I'm not sure that BOOST_CONCEPT_REQUIRES does SFINAE, but if it does, you
will need a metafunction (and possibly lazy_enable_if) to avoid accessing
range_value<T> when T is not a range if that doesn't instantiate properly
for non-ranges.

-- Jeremiah Willcock


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net