Terje Slettebų <[EMAIL PROTECTED]> writes: >>From: "Rani Sharoni" <[EMAIL PROTECTED]> > >> template <typename B, typename D> >> struct is_base_and_derived >> { >> private: >> typedef char (&yes)[1]; >> typedef char (&no) [2]; >> >> template<typename T> >> static yes check(D const volatile &, T); >> static no check(B const volatile &, int); >> >> struct C >> { >> operator B const volatile &() const; >> operator D const volatile &(); >> }; >> >> static C getC(); >> public: >> static const bool result = >> sizeof(check(getC(), 0)) == sizeof(yes); >> }; >> >> Additional specializations needed (e.g. void and reference types) > > Very nice, Rani. Very clever. :)
I'm only not commenting yet because I don't get it yet. > It's interesting that, according to your clc++m posting, the inspiration of > this came from Andrei Alexandrescu's article on Mojo, who also came up with > Loki's SuperSubclass trait. Dave Abrahams is also credited in the thread, > for contributing to the above technique. I don't think I deserve credit for anything above. What I did for Mojo has to do with using derivation to force some precedence in the overload resolution (according to rules I probably never really understood, but had an intuitive feeling for). > As you show in the other posting with example use, the above version works > as overload resolution is done before access check, so it works also for > private base classes. Besides, in this case, it never gets to do an access > check, as the actual call is never done. Oh, well maybe it has a remote connection to my Mojo contribution, but that would depend on my having understood the mechanism at work (which I clearly did not ;->). > As I understand, the reason it works for multiple occurrences of the same > base class is that it's not asking for D's B subobject, but instead for a > conversion to _a_ B (any B). > > Also, "static no check(B const volatile &,int)" works as an ambiguity > buster, in the case where B is not a base class of D. Nice explanation. I'll have to look again tomorrow when I have a few more brain cells at my disposal... -- David Abrahams [EMAIL PROTECTED] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost