这是我的代码:
class agg_t1{
int x; // private non-static data menber
};
class agg_t2{
agg_t2(){} // user-provided constructor
};
constexpr void ce1(agg_t1 arg){}; // OK
constexpr void ce2(agg_t2 arg){}; // ERROR: parameter type 'agg_t2' is not a literal type
constexpr 函数的定义应满足以下要求: ...
- 它的每个参数类型都应该是文字类型;...
一个类型是文字类型,如果它是: ...
- 它要么是闭包类型,要么是聚合类型,要么是...
我理解不是文字类型的原因agg_t2是它违反了规则dcl.init.aggr#1.1:
聚合是一个数组或一个类...
- 没有用户声明或继承的构造函数...
而且我认为agg_t1可能不是文字类型,因为它也违反了规则dcl.init.aggr#1.1:
聚合是一个数组或一个类...
- 没有私有或受保护的直接非静态数据成员...
但是......编译器结果告诉我我对agg_t1.
我的问题是:
如果agg_t1私有数据成员x使其成为非聚合类型,那么为什么在函数定义中agg_t1允许该类型?constexprce1