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?
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.
Tags und Links c++ c++-concepts c++17