Код, который компилируется с MSVC ++ 08 ТАКЖЕ, а также с GCC, Comeau и Clang (отредактировано).
#include <iostream>
template<typename T>
struct Check_If_T_Is_Class_Type
{
template<typename C> static char func (char C::*p);
template<typename C> static int func (...);
enum{val = sizeof (func<T>(0)) == 1};
};
class empty{};
int main()
{
std::cout<<Check_If_T_Is_Class_Type<empty>::val; // 1
std::cout<<Check_If_T_Is_Class_Type<int>::val; // 0
std::cout<<Check_If_T_Is_Class_Type<std::string>::val; //1
}
@ Prasoon ... не могли бы вы скомпилировать это на Comeau и Clang ... и скажите мне, скомпилировано это или нет? спасибо!