tob*_*spr 7 c++ language-lawyer
假设我有以下(无效)代码:
struct A {
A(A) {};
};
Run Code Online (Sandbox Code Playgroud)
MSVC给了我:
error C2652: 'A' : illegal copy constructor: first parameter must not be a 'A'
Run Code Online (Sandbox Code Playgroud)
为什么编译器会将此检测为复制构造函数,而不是常规构造函数?
C++标准的第12.8.2章说:
如果第一个参数的类型为X& , const X& , volatile X& 或 const volatile X&,则类X的非模板构造函数是一个复制构造 函数.
我希望编译器将上述方法检测为常规构造函数,就像
struct A {
A(B) {};
};
Run Code Online (Sandbox Code Playgroud)
而B是另一类.
这种行为在哪里定义?
归档时间: |
|
查看次数: |
179 次 |
最近记录: |