#ifndef INCLUDED_CONVERSION_H_ #define INCLUDED_CONVERSION_H_ //CONVERSION template class LconvertibleToR { struct Char2 { char array[2]; }; static T const &makeT(); static char test(U const &); static Char2 test(...); public: LconvertibleToR(LconvertibleToR const &other) = delete; enum { yes = sizeof(test(makeT())) == sizeof(char) }; enum { sameType = 0 }; }; template class LconvertibleToR { public: LconvertibleToR(LconvertibleToR const &other) = delete; enum { yes = 1 }; enum { sameType = 1 }; }; //= //LBASERDERIVED template struct LBaseRDerived { LBaseRDerived(LBaseRDerived const &) = delete; enum { yes = LconvertibleToR::yes && not LconvertibleToR::sameType }; }; //= //LBASERTRUE template struct LBaseRtrulyDerived { LBaseRtrulyDerived(LBaseRtrulyDerived const &) = delete; enum { yes = LBaseRDerived::yes && not LconvertibleToR::sameType }; }; //= #endif