La sezione N3797::12.8/11 [class.copy]
dice:Il caso in cui il costruttore di copia implicitamente definito come cancellati
Un costruttore implicitamente dichiarata copiare/spostare è una linea pubblica membro della sua classe. Un default costruttore di copia/spostamento per una classe X è definita come eliminato (8.4.3) se X ha:
[...]
- un data non statici membro del tipo di classe M (o matrice esso) che non può essere copiato/spostato perché la risoluzione di sovraccarico (13.3), applicato ad M corrispondente costruttore risultati in un'ambiguità o una funzione che viene eliminato o inaccessibile dal costruttore stabilizzato
Il primo caso sull'ambiguità del corrispondente costruttore di copia/spostamento è abbastanza chiaro. Possiamo scrivere quanto segue:
#include <iostream>
using namespace std;
struct A
{
A(){ }
A(volatile A&){ }
A(const A&, int a = 6){ }
};
struct U
{
U(){ };
A a;
};
U u;
U t = u;
int main(){ }
per riflettere questo. Ma che dire di o di una funzione che è stata cancellata o inaccessibile dal costruttore predefinito? Cosa si ottiene con una funzione inaccessibile dal costruttore predefinito? Potresti fornire un esempio che rifletta questo?
Dice * costruttore predefinito *, non "costruttore predefinito" - si riferisce al costruttore di copia/spostamento predefinito –