> The following version works on g++ for the same cases that the current > is_base_and_derived works (i.e. excluding multiple bases, and > private/protected inheritance), and gives an error in the cases it doesn't > work, while it works completely on the compilers that supports this (such as > Comeau C++ and Intel C++ 6/7). In other words, it "degrades gracefully", and > breaks noisily, if the compiler doesn't support the extra cases. This is > tested on Comeau 4.3, Intel C++ 6/7 and g++ 3.2.
Except it *doesn't work* ! The problem is that your static assertion don't test anything, changing to: //typedef char TestA[is_base_and_derived<B, D>::result]; // Multiple bases (error on g++) typedef char TestB[is_base_and_derived<B1,D>::result ? 1 : -1]; //typedef char TestC[is_base_and_derived<B2,D>::result]; // Private base (error on g++) typedef char TestD[!is_base_and_derived<int,D>::result ? 1 : -1]; typedef char TestE[!is_base_and_derived<B, B>::result ? 1 : -1]; typedef char TestF[is_base_and_derived<B,DV>::result ? 1 : -1]; // Virtual base and both Borland and gcc 3.21 give errors on cases 2 and 6 John Maddock http://ourworld.compuserve.com/homepages/john_maddock/index.htm _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost