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::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, kalb at, bjorn.karlsson at, gregod at, wekempf at