boost :: enable_if método de plantilla de clase

Obtuve clase con métodos de plantilla que mira esto:

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) {
        }
};

aparentemente, ambas plantillas se instancian, lo que resulta en un error de tiempo de compilación. ¿Es la creación de instancias de métodos de plantilla diferente de la creación de instancias de funciones libres? He solucionado esto de manera diferente, pero me gustaría saber qué pasa. Lo único en lo que puedo pensar es que puede causar este comportamiento, la condición habilitadora no depende de argumentos de plantilla inmediatos, sino de argumentos de plantilla

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta