Boost logo

Boost Users :

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


On Tue, 27 Mar 2012, Robert Jones wrote:

> On Tue, Mar 27, 2012 at 5:02 PM, Jeremiah Willcock <jewillco_at_[hidden]> wrote:
> 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.
>
> No, it fails when the parameter IS a valid range, of the required value type. I can create the same effect by
> substituting void for the whole enable_if bit, and then using BOOST_ASSERT in the body of the function to impose
> the same condition, but that is obviously less satisfactory.
>
> I suspect void is special because it is enable_if's returned type if type is not specified, but I can't quite see why, or
> what the impact of that is.

Does it still fail even if you don't use BOOST_CONCEPT_REQUIRES? If the
function fails only with a void return type, are you sure you're not
trying to return something (at least along some control flow path)? What
in particular is the error message you get?

-- 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