【发布时间】:2019-04-23 14:03:55
【问题描述】:
我一直认为std::is_same、std::is_void 或std::is_aggregate 之类的类型应该继承自std::integral_constant,或者更具体地说是继承自std::bool_constant。
但是,聚合类不能有基类by definition,但是当我在std::is_aggregate_v<T> 中将这些类型用作T 时,我得到true。显然,它们不是源自std::bool_constant?
所以我的问题是:
为什么std::is_aggregate_v<std::is_aggregate<void>> 是正确的,至少对于 GCC 和 Clang?标准不是指定std::is_aggregate 是从std::bool_constant 派生的吗?如果不是,这是否意味着它将上述行的值保留为实现细节?
【问题讨论】:
-
en.cppreference.com/w/cpp/language/aggregate_initialization C++17 中允许使用非虚拟公共基类
-
在您链接的页面上向下滚动;阅读整个页面;)
-
是的,没有意识到链接的文本在多个答案中继续存在;)
-
@x432ph 阅读页面上的所有(或至少大部分)答案通常是个好主意;我们有一个一对多的问答模型是有原因的!
标签: c++ std c++17 typetraits