On 03.03.2016, at 23:33, Matt Calabrese
wrote: Excluding C++98 support, why do you need a compiler intrinsic for this change? If the reason is the incompleteness check, I've implemented completeness checking metafunctions before and it's fully possible without intrinsics in C++11. I described a completeness metafunction that works in practice a few years ago in a discussion on the mailing list here: https://groups.google.com/forum/#!topic/boost-developers-archive/zp7u3XHv6zc which links to an implementation here: http://codepaste.net/xfgcu8 (there are subtleties to usage, of course). The code that is linked is old and not fully correct, although in the time since that thread, I have produced what I believe to be a fully correct and well tested implementation.
That is a very interesting technique, I didn’t knew about it. But if std::is_base_of is available, boost::is_base_of should surely just forward to it, so only those compilers that don’t have it (aka mostly pre-C++11 compilers) are of interest here. Maybe lifting the restriction (and using an alternative implementation) should be conditional, only to be guaranteed by boost::is_base_of when compiling with C++11 or newer?