Код: Выделить всё
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
Так кажется, что компилятор не создает экземпляра func1 в концепции, но это делает это для func2 , предположительно, потому что он должен определить тип возврата (как это Auto ).
Я не нашел слишком много об этом в expr.prim.req.simple: < /p>
». Простая реквизита утверждает обоснованность выражения.
Выражение - это не операнд. Где точные правила, касающиеся того, когда компилятор создает матч?
Подробнее здесь: https://stackoverflow.com/questions/793 ... f-template