23W*_*23W 1 c++ std visual-studio-2010 visual-c++ c++11
std::is_base_of<B, D>如果D是从B派生的,或者两者都是相同的非联合类,则C++ 11标准必须返回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
Run Code Online (Sandbox Code Playgroud)
但这与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:
Base是Derived的基类,不考虑cv-qualifiers,或者Base和Derived不是联合并且命名相同的类类型而不考虑cv-qualifiers
C++ 11标准甚至还有以下作为其中一个例子(C++ 11 20.9.6/3):
Run Code Online (Sandbox Code Playgroud)is_base_of<int, int>::value // false
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |