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
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?