根据C++ 11标准,如果D是从B派生的,或者两者都是同一个非联合类,那么std::is_base_of<B, D>
必须返回true。但是在VC++ 2010中,如果类型B是类型D的唯一基类,则STL实现模板将返回true!是虫子吗?
在示例部分的http://msdn.microsoft.com/en-us/library/bb982243(v=vs.100).aspx页面上
std::is_base_of<base, base> == true
但这与VC++ 2010 STL实现不对应。尽管它符合C++ 11标准的要求。错误在哪里?
最佳答案
is_base_of<int, int>::value
评估为false
(您的评论表明这是您的实际问题),因为只有当模板参数是类类型时,is_base_of<>::value
才能评估为true
。 C++ 11标准的表51-类型关系谓词(C++ 20.9.6“类型之间的关系”)定义了is_base_type<>
,当且仅当(加强调)时,其值才为true:
C++ 11标准甚至将以下示例作为其示例之一(C++ 11 20.9.6 / 3):
关于c++ - VC2010实现的std::is_base_of包含错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13816778/