On 4/03/2016 12:24, Daniel Frey wrote:
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?
I think the operative question is, why would you use it? If you know you have C++11 compilers always, then use std::is_base_of and your code can use complete or incomplete types as you wish. If you don't know you have C++11 compilers always, then use boost::is_base_of and restrict yourself to complete types. If you're using the Boost version to broaden compiler support, then your code would not compile (or would produce different results) depending which environment you compiled it in. So you could end up with code that works in development but fails in production.