gpt4 book ai didi

c++ - std::is_base_of 的 VC2010 实现包含一个错误?

转载 作者:行者123 更新时间:2023-11-30 00:37:12 26 4
gpt4 key购买 nike

根据 C++11 标准 std::is_base_of<B, D>如果 D 是从 B 派生的,或者两者是同一个非 union 类,则必须返回 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标准的要求。错误在哪里?

最佳答案

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

Base is a base class of Derived without regard to cv-qualifiers or Base and Derived are not unions and name the same class type without regard to cv-qualifiers

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

is_base_of<int, int>::value // false

关于c++ - std::is_base_of 的 VC2010 实现包含一个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13816778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com