пятничное про работу

Feb 18, 2011 18:37



#include

struct TrueType { char _strub; };
struct FalseType { char _strub[2]; };

template struct Instance { typedef T InstanceType; };

template TrueType InstanceChecker(typename T::InstanceType const*);
template FalseType InstanceChecker(...);

struct Base1 : public Instance {};
struct Base2 : public Instance {};

struct Fail : public Base1, public Base2 {};

int main()
{
if (sizeof(InstanceChecker(0)) != sizeof(TrueType))
std::cout << "base1" << std::endl;
if (sizeof(InstanceChecker(0)) != sizeof(TrueType))
std::cout << "base2" << std::endl;
if (sizeof(InstanceChecker(0)) != sizeof(TrueType))
std::cout << "fail" << std::endl;
return 0;
}

вывод:

fail

а все потому, что когда компилятро не может явно выбрать какой из типов Base1::InstanceType или Base2::InstanceType использовать в качестве Fail::InstanceType, он решает, что в Fail такого типа нет вообще. А раз инстанцирование этого типа (явно) нигде не происходит, то и ошибок компиляции тоже нет, пятница прошла не зря.

c++, как страшно жыть, memento

Previous post Next post
Up