In Parameterlisten erforderlich, können Sie Typen einführen, die zu Substitutionsfehlern führen?

8

Zum Beispiel kann ich ein Konzept wie

definieren %Vor%

Mit gcc 6 wird dieser Code kompilieren , aber etwas wie Iterator<int> wird auch zu true führen, obwohl val und ref wären Substitutionsfehler. Ist es das, was es tun soll?

    
rnickb 26.09.2015, 19:50
quelle

1 Antwort

7

Unter Verwendung des letzten öffentlich verfügbaren Entwurfs N4377 ist dies eine parametrisierte Einschränkung ([temp.constr.param ]):

  

Eine parametrisierte Einschränkung ist eine Einschränkung, die eine Sequenz deklariert   der Parameter (8.3.5), genannt constraint-Variablen , und hat eine einzige   Operand. [ Hinweis : Parametrisierte Einschränkungen werden durch eingeführt    requires-expression s (5.1.4). Die Constraint-Variablen einer parametrisierten Constraint entsprechen den in der    Anforderungs-Parameterliste eines requires-expression und der Operand der Einschränkung ist die Konjunktion von Integritätsbedingungen. - Ende   Notiz ]

Und dieser Abschnitt erwägt explizit Substitutionsfehler für Constraint-Variablen ([temp.constr.param] / 2):

  

Eine parametrisierte Einschränkung ist erfüllt, wenn und nur die Substitution in   Die Typen seiner Beschränkungsvariablen führen nicht zu einem ungültigen Wert   Typ, und sein Operand ist erfüllt. Vorlagenargumente werden ersetzt   in die deklarierten Constraint-Variablen in der Reihenfolge, in der sie sind   erklärt. Wenn die Substitution in eine Constraint-Variable fehlschlägt, nicht mehr   Substitutionen werden durchgeführt, und die Bedingung ist nicht erfüllt.

Das Verhalten, das Sie beobachten, scheint ein Fehler in der Implementierung zu sein.

    
T.C. 26.09.2015, 20:38
quelle

Tags und Links