Boost logo

Boost Users :

Subject: Re: [Boost-users] enable_if and templated operator() of member of class template
From: Philipp Moeller (philipp.moeller_at_[hidden])
Date: 2012-03-01 09:40:05


"MM" <finjulhich_at_[hidden]> writes:

> Hello,
>
> I am using the enable_if construct to disable an operator() template member
> function of a templated variant visitor:
>
>
> template <typename iter_t>
> class iterator_compare_visitor_ : public boost::static_visitor<bool> {
> public:
> iterator_compare_visitor_(const iter_t& to_compare_to)
> : to_compare_to_(to_compare_to)
> {}
>
> template <typename variant_iter_t>
> typename std::enable_if< boost::mpl::contains<const_iterators_t,
> iter_t>::value, bool >::type
> operator()(const variant_iter_t& it) const
> {
> return std::is_same<variant_iter_t, iter_t>::value &&
> it==to_compare_to_;
> }
>
> template <typename variant_iter_t>
> typename std::enable_if< boost::mpl::contains<const_reverse_iterators_t,
> iter_t>::value, bool >::type
> operator()(const variant_iter_t& it) const
> {
> return std::is_same<variant_iter_t, iter_t>::value &&
> it==to_compare_to_.base();
> }
>
> private:
> const iter_t& to_compare_to_;
> };
>
>
> The compilation fails in msvc2010 with:
>
> error C2039: 'type' : is not a member of 'std::tr1::enable_if<_Test,_Type>'
> 1> with
> 1> [
> 1> _Test=false,
> 1> _Type=bool
> 1> ]
>
> in this case, iter_t is not contained in const_reverse_iterators_t and so
> the 2nd operator() should not be enabled.
>
> Rds,
>
> MM

What you are trying cannot work as this is not a valid way to overload
operator(). Consider using enable_if as an argument to your functions:

http://codepad.org/nduBfhT6

As for the actual error: It looks like your compiler is using
std::tr1::enable_if even if you specify `std::enable_if`. Those should
be equivalent. You might want to use boost::enable_if.

Also, please try to provide snippets that don't require modifications to
show the bug (e.g. includes).

HTH,
Philipp Moeller


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