Unmittelbarer Kontext in C 11 SFINAE
Der C 11-Standard definiert SFINAE (Substitution Failure Is Not An Error) als eine Technik zur bedingten Aktivierung oder Deaktivieren von Code basierend auf dem Abzug von Vorlagenargumenten. Abschnitt 14.8.2/8 beschreibt die Bedingungen, unter denen ein Substitutionsfehler zu einem „harten“ Kompilierungsfehler oder einem „weichen“ Fehler führt, der zu SFINAE führt.
Der Standard bezieht sich in diesem Abschnitt auf einen „unmittelbaren Kontext“. , was darauf hinweist, dass nur ungültige Typen und Ausdrücke im unmittelbaren Kontext des Funktionstyps und seiner Vorlagenparametertypen einen Abzugsfehler verursachen können. Die Definition von „unmittelbarem Kontext“ ist jedoch nicht explizit.
Entscheidungsverfahren für unmittelbaren Kontext
Um festzustellen, ob ein Ersetzungsfehler im unmittelbaren Kontext auftritt, berücksichtigen Sie Folgendes Folgendes:
Stellen Sie sich vor, dass alle Vorlagen und implizit definierten Funktionen, die für die Ersetzung von Vorlagenargumenten erforderlich sind, im Voraus generiert werden. Alle während dieser Vorbereitung auftretenden Fehler stehen nicht im unmittelbaren Kontext und führen zu harten Kompilierungsfehlern.
Wenn der Vorbereitungsschritt erfolgreich abgeschlossen wird, werden alle nachfolgenden Fehler während der Ersetzung (z. B. Verweise auf instanziierte Vorlagen oder implizit definierte Funktionen) behoben in der Signatur der Funktionsvorlage) stellen keinen Fehler dar, sondern führen zu einem Abzug Fehler.
Beispiele
Beispiel 1:
template<typename T> void func(typename T::type* arg); template<typename> void func(...); template<typename T> struct A { typedef T* type; }; func<A<int&>>(...);
In diesem Beispiel Instanziierung A
Beispiel 2:
template<typename T> void func(typename T::type* arg); template<typename> void func(...); template<typename T> struct A { typedef T* type; }; template<> struct A<char> {}; func<A<char>>(...);
In diesem Beispiel ist die Der Vorbereitungsschritt instanziiert erfolgreich A
Das obige ist der detaillierte Inhalt vonWas definiert „unmittelbaren Kontext' in C 11 SFINAE?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!