根据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/

10-11 23:08
查看更多