1

std::is_base_of<B, D>如果 D 派生自 B 或者两者都是相同的非联合类,则C++11 标准必须返回 true。但在 VC++ 2010 stl 实现模板中,如果 B 类型是 D 类型的唯一基类,则返回 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 标准的要求。哪里有错误?

4

1 回答 1

7

is_base_of<int, int>::value评估为false(您的评论表明这是您的实际问题),因为仅当模板参数是类类型时is_base_of<>::value才能评估为。trueC++11 标准的表 51 - 类型关系谓词(C++ 20.9.6“类型之间的关系”)定义is_base_type<>当且仅当(强调添加)时评估为真:

Base 是 Derived 的基类,不考虑 cv 限定符,或者 Base 和 Derived 不是联合,并且在不考虑 cv 限定符的情况下命名相同的类类型

C++11 标准甚至将以下内容作为其示例之一 (C++11 20.9.6/3):

is_base_of<int, int>::value // false
于 2012-12-11T09:47:45.670 回答