Boost logo

Boost Users :

Subject: Re: [Boost-users] enable_if and templated operator() of member of class template
From: MM (finjulhich_at_[hidden])
Date: 2012-03-02 13:27:59


> -----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
> http://codepad.org/6AORo7tU, in which I've used boost::enable_if and
> added
> some tests. One fix is to make the enable_if condition dependent, as
> in
> http://codepad.org/916Tl6W8 (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, http://codepad.org/916Tl6W8 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?

rds,
MM


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