如果D是从B派生的,或者两者都是相同的非联合类,则通过C ++ 11标准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标准的要求。哪个错误?
答案 0 :(得分:7)
is_base_of<int, int>::value
评估为false
(您的评论表明这是您的实际问题),因为is_base_of<>::value
只有在模板参数是类类型时才能评估为true
。 C ++ 11标准的表51 - 类型关系谓词(C ++ 20.9.6“类型之间的关系”)将is_base_type<>
定义为当且仅当(强调添加)时评估为true:
Base是Derived的基类,不考虑cv限定符,或者Base和Derived不是联合并且命名相同的类类型而不考虑cv-qualifiers
C ++ 11标准甚至将以下内容作为其示例之一(C ++ 11 20.9.6 / 3):
is_base_of<int, int>::value // false