Aşırı derecede belirsiz bir başlık için özür dilerim (İngilizce becerememin eksikliğinden dolayı). Lütfen daha iyi bir başlık öneriniz.Neden kurucu kopyalanmıyor?
Lütfen aşağıdaki kodu dikkate alın.
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 hata mesajı error: no matching function for call to 'std::vector<double>::vector(A&)' : a(std::forward<Args>(args)...)
ile derlemek başarısız oldu.
Bu kodun neden yanlış olduğunu anlayamıyorum. Bence derleyici, A b = a;
numaralı hattaki kopya kurucuyu çağırmalıdır. Ancak, kurucuyu, yorumlanana göre değiştirirseniz (bu yalnızca değerleri alır). Derleme yapar. Ayrıca, şimdi varsayılan kopyalama (ve taşıma) kurucularına gerek yoktur. Burada ne oluyor?
Oh, anlıyorum. Net açıklama için teşekkürler. :) – Sungmin