Вот еще один пример (последний) SFINAE , основанный на ответ Грега Роджерса :
template
class IsClassT {
template static bool test(int C::*) {return true;}
template static bool test(...) {return false;}
public:
static bool value;
};
template
bool IsClassT::value=IsClassT::test(0);
Таким образом, вы можете проверить значение value
, чтобы узнать, является ли T
классом или нет:
int main(void) {
std::cout << IsClassT::value << std::endl; // true
std::cout << IsClassT::value << std::endl; // false
return 0;
}