Boost logo

Boost Users :

Subject: Re: [Boost-users] enable_if and templated operator() of member of class template
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2012-03-02 14:29:28

On Fri, 2 Mar 2012, MM wrote:

>> -----Original Message-----
>> From: boost-users-bounces_at_[hidden] [mailto:boost-users-
>> bounces_at_[hidden]] On Behalf Of Jeremiah Willcock
>> Sent: 01 March 2012 16:48
>> To: boost-users_at_[hidden]
>> Subject: Re: [Boost-users] enable_if and templated operator() of member
>> of class template
>> On Thu, 1 Mar 2012, MM wrote:
>> The main issue here is that the condition in enable_if does not depend
>> on
>> the template parameter to operator(); see the version in
>>, in which I've used boost::enable_if and
>> added
>> some tests. One fix is to make the enable_if condition dependent, as
>> in
>> (there were a number of other issues in the
>> code; note that the is_same<variant_iter_t, iter_t> condition needs to
>> be
>> in the enable_if since the body of the function will not always compile
>> when that is false). Please see if that last paste works for you.
>> -- Jeremiah Willcock
> Thank you, compiled. Using std::enable_if as
> well. (msvc10 uses their TR1 impl).
> I need an extra check for the 2nd operator() of the visitor, that
> variant_iter_t is actually identical to iter_t::Iterator embedded type.
> Basically, it treats the case where iter_t is a reverse_iterator of the
> iterators in my variant, and we need to check that we're applying visitation
> on the proper iterator.
> So line 43: is_same should be <variant_iter_t, typename iter_t::Iterator>
> the problem is that this operator is instantiated even for the case where
> iter_t is a const_iterator and not a const_reverse_iterator and compilation
> fails, because const_iterator has no embedded type Iterator.
> How to fix?

Try this version instead: It uses a helper
template to do the dispatching among the overloads.

-- Jeremiah Willcock

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at