VC2010执行std :: is_base_of包含bug?

时间:2012-12-11 08:59:41

标签: c++ visual-studio-2010 visual-c++ c++11 std

如果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标准的要求。哪个错误?

1 个答案:

答案 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