|
Boost Users : |
Subject: [Boost-users] enable_if and templated operator() of member of class template
From: MM (finjulhich_at_[hidden])
Date: 2012-03-01 04:42:00
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
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