For this you need a pair of typename :
// For classes that declare T = int template <class C> void f(C &c, typename std::enable_if<!std::is_same<typename C::T, void>::value, int>::type = 0) { std::cout << "With T" << std::endl; } // For classes that declare T = void template <class C> void f(C &c, typename std::enable_if<std::is_same<typename C::T, void>::value, int>::type = 0) { std::cout << "Without T" << std::endl; }
Or, if your compiler supports C ++ 14, you can use std::enable_if_t :
// For classes that declare T = int template <class C> void f(C &c, std::enable_if_t<!std::is_same<typename C::T, void>::value, int> = 0) { std::cout << "With T" << std::endl; } // For classes that declare T = void template <class C> void f(C &c, std::enable_if_t<std::is_same<typename C::T, void>::value, int> = 0) { std::cout << "Without T" << std::endl; }
source share