Что означает «достоверность» в выражении? Каковы правила матрицы матрицы в простом правительстве?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Что означает «достоверность» в выражении? Каковы правила матрицы матрицы в простом правительстве?

Сообщение Anonymous »

Посмотрите на этот код. Он содержит два шаблона функций, ни один из которых не может быть создан с помощью char *, поскольку t * 1 не компилируется. Однако, если я помещу func1 в выражение require концепции, концепция будет истинной для char *:

Код: Выделить всё

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

Подробнее здесь: https://stackoverflow.com/questions/793 ... f-template
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»