
"MM"
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
::value, bool >::type operator()(const variant_iter_t& it) const { return std::is_same ::value && it==to_compare_to_; } template <typename variant_iter_t> typename std::enable_if< boost::mpl::contains
::value, bool >::type operator()(const variant_iter_t& it) const { return std::is_same ::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