Was bedeutet "Validität" in Ausdruck? Was sind die Regeln der Vorlage-Instanziierung in der einfachen Erfassung?C++

Programme in C++. Entwicklerforum
Guest
 Was bedeutet "Validität" in Ausdruck? Was sind die Regeln der Vorlage-Instanziierung in der einfachen Erfassung?

Post by Guest »

Sehen Sie sich diesen Code an. Es enthält zwei Funktionsvorlagen, und kann auch nicht mit char * instanziiert werden, da T * 1 nicht kompiliert werden. Wenn ich jedoch Func1 in einen Ausdruck eines Konzepts einsetzt PrettyPrint-Override ">

Code: Select all

template 
void func1(T t) {
t * 1;
}

template 
auto func2(T t) {
return t * 1;
}

template 
concept foo = requires (T t) { func1(t); };

static_assert(foo); // assert doesn't fire, but func1 is a non-compiling function
Dies wird kompiliert, auch wenn func1 nicht kompiliert wird, wenn es mit char * instanziiert wird. Wenn ich im Konzept func2 anstelle von func1 verwende, wird das Konzept foo zu false.
Es scheint also, dass der Compiler instanziiert func1 nicht im Konzept, sondern für func2, vermutlich weil es den Rückgabetyp bestimmen muss (da es automatisch ist).
Ich habe nicht viel darüber gefunden expr.prim.req.simple:
"Eine einfache Anforderung bestätigt die Gültigkeit eines Ausdrucks.
Der Ausdruck ist ein nicht bewerteter Operand."
Was bedeutet Gültigkeit in diesem Zusammenhang? Wo sind die genauen Regeln, wann der Compiler die Vorlage instanziieren soll?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post