Si consideri il seguente codice:Il binding temporaneo a un riferimento richiede un costruttore di copia in C++?
class A {
A(const A&);
public:
A() {}
};
int main() {
const A &a = A();
}
Questo codice compila bene con GCC 4.7.2, ma non riesce a compilare con Visual C++ 2010 con il seguente errore:
test.cc(8) : error C2248: 'A::A' : cannot access private member declared in class 'A'
test.cc(2) : see declaration of 'A::A'
test.cc(1) : see declaration of 'A'
Così è necessario avere un costruttore di copia accessibile quando si associa un riferimento temporaneo a un riferimento?
Questo è in qualche modo legato alla mia domanda precedente:
Is there a way to disable binding a temporary to a const reference?
Sì, il copy ctor è privato e non implementato intenzionalmente. – vitaut
Hai provato solo 'A(). 'È possibile che sia necessario che il costruttore di copia copi dalla funzione al valore restituito. –
Visual C++ 2012 accetta il codice. –