对不起,过于模糊的标题(由于缺乏我的英语技能).请建议一个更好的标题.
请考虑以下代码.
struct A { typedef std::vector<double> State; // template <class... Args> // A(Args... args) // : a(args...) // {} template <class... Args> A(Args&&... args) : a(std::forward<Args>(args)...) {} A(const A&) = default; A(A&&) = default; State a; }; int main(){ A a(3,2); A b = a; // This line triggers an error!! }
Gcc 4.8.0无法使用错误消息进行编译
错误:调用’std :: vector< double> :: vector(A&)’的匹配函数:a(std :: forward< Args>(args)…).
我不明白为什么这个代码是错误的.在我看来,编译器应该调用A行= a的行中的复制构造函数.
但是,如果我用已注释的替换构造函数(简单地取值).它编译.此外,现在不需要默认的复制(和移动)构造函数.
这里发生了什么?