g ++ 4.7 wspiera inicjalizację elementu tablicy i zacząłem grać z nim.inicjalizacja elementu tablicowego typów zdefiniowanych przez użytkownika
Poniższy kod nie został skompilowany.
struct A
{
A(int){};
A(const A&) = delete;
A& operator=(const A&) = delete;
~A(){};
};
struct B
{
B():
a{{0},{1}}
{};
A a[2];
};
B b;
Komunikat o błędzie z gcc 4.8 (prerelease) wynosi:
n.cc: In constructor ‘B::B()’:
n.cc:12:20: error: use of deleted function ‘A::A(const A&)’
a{{0},{1}}
^
n.cc:4:8: error: declared here
A(const A&) = delete;
^
Czy istnieje sposób, aby to działało kodu? Nie mogę łatwo zmienić contructors, destruktor A. Potrzebuję konstruktora ruchu lub konstruktora kopiowania do zainicjowania tablicy, ale wydaje mi się to sprzeczne z intuicją, ponieważ wszystko, czego naprawdę chcę, to budowa na miejscu.
Działa, jeśli podzielę [2] na 2 elementy a0 i a1 i skonstruuję je oddzielnie. Wygląda to jednak podejrzanie.
":" w konstruktorze używa konstruktorów kopii do przypisywania wartości, a usuwa się je w A, co powoduje błąd. –