Der Abschnitt definiert N3797::12.8/11 [class.copy]
sagt:Der Fall, wenn die Kopie-Konstruktor implizit als gelöscht
An-implizit deklariert Kopieren/Verschieben Konstruktor ist ein Inline-öffentliche Mitglied seiner Klasse. Ein ausgefallenes Kopieren/Verschieben Konstruktor für eine Klasse X wird als gelöscht definiert (8.4.3), wenn X hat:
[...]
- ein nicht-statische Daten Mitglied der Klasse Typ M (oder Array davon), die nicht kopiert werden kann/verschoben wegen Überlastung Auflösung (13.3), angewandt auf M Konstruktor, führt zu einer Zweideutigkeit oder eine Funktion, die gelöscht oder unzugänglichen vom ausgefallenen Konstruktor entsprechenden
Der erste Fall über die Mehrdeutigkeit des entsprechenden Copy/Move-Konstruktors ist ziemlich klar. Wir können folgendes schreiben:
#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(){ }
um das zu reflektieren. Aber was ist mit oder einer Funktion, die aus dem Standardkonstruktor gelöscht oder nicht zugegriffen werden kann? Was ist das mit einer Funktion, auf die der Standardkonstruktor nicht zugreifen kann? Könnten Sie ein Beispiel dafür geben?
Es sagt * defaulted-Konstruktor *, nicht "default constructor" - dies bezieht sich auf den Standard-Copy/Move-Konstruktor –