vc编译器咋整个都编译不过,大CC都没问题
#include <vector>
#include <windows.h>
using namespace std;
template< typename D, typename B >
class IsDerivedFrom
{
public:
IsDerivedFrom()
{
}
static void cons(D*p)
{
B* pb = p;
pb = p;
}
protected:
void IsDev() { void (*p) (D*) = cons; }
};
template< typename D >
class IsDerivedFrom<D,void>
{
public:
IsDerivedFrom()
{
char* p = (int*) 0;
}
};
template< typename D, typename B >
class IsDerivedFrom1
{
class No {};
class Yes {No no[2]; };
static Yes Test(B*);
static No Test(...);
public:
enum { Is = sizeof(Test(static_cast<D*>(0))) == sizeof(Yes) };
};
enum
{
No,
Is
};
#if Is
#error shit
#endif
#if No
#error shit
#endif
template<typename D, int yesno >
class YesNo{};
template<typename D >
class YesNo<D,0>
{
public:
YesNo()
{
char* p = (int*) 0;
}
};
class A{};
class B{};
class C:public B{};
int main(int argc, char* argv[])
{
IsDerivedFrom<Singleton,int> a;
YesNo<int,10> b;
YesNo<int,Is> c;
//YesNo<int,No> d;
YesNo<int,IsDerivedFrom1<C,B>::Is> e;
//YesNo<int,IsDerivedFrom1<C,A>::Is> f;
}
问题点数:0、回复次数:0Top




