I got class with template methods that looks at this:
struct undefined {};
template<typename T> struct is_undefined : mpl::false_ {};
template<> struct is_undefined<undefined> : mpl::true_ {};
template<class C>
struct foo {
template<class F, class V>
typename boost::disable_if<is_undefined<C> >::type
apply(const F &f, const V &variables) {
}
template<class F, class V>
typename boost::enable_if<is_undefined<C> >::type
apply(const F &f, const V &variables) {
}
};
apparently, both templates are instantiated, resulting in compile time error.
is instantiation of template methods different from instantiation of free functions?
I have fixed this differently, but I would like to know what is up.
the only thing I can think of that might cause this behavior, enabling condition does not depend immediate template arguments, but rather class template arguments
Thank you
Your
Cdoes not participate in deduction forapply. See this answer for a deeper explanation of why your code fails.You can resolve it like this: