Почему концепции C ++ 20 (выражение требований) с использованием std :: is_arithmetic_v не в состоянии обеспечить ограниC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему концепции C ++ 20 (выражение требований) с использованием std :: is_arithmetic_v не в состоянии обеспечить ограни

Сообщение Anonymous »

Я столкнулся с неожиданным поведением при внедрении концепций C ++ 20, основанного на примере из шаблон -метапреграммирования шаблонов с помощью C ++: узнайте все о шаблонах C ++ и разблокируйте силу метапреграммирования шаблонов (по мариусу Банчилу, 2022). эквивалент: < /p>
версия 1: < /p>

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

template
concept arithmetic = requires {
std::is_arithmetic_v;
};
< /code>
версия 2: < /p>
template
concept arithmetic = requires { std::is_arithmetic_v; };
< /code>
Однако первая версия: < /p>
#include 
#include 
#include 

template
concept arithmetic = requires
{
std::is_arithmetic_v;
};

template 
requires arithmetic
T add(T const a, T const b) { return a + b; }

int main() {
add("a", "b");
}
как Visual Studio, 2022, так и https://cppinsights.io/ с -std = c ++ 20 Иметь ошибку компиляции: '+': не может добавить два указателя
Но следующая версия
#include
#include
#include

template
concept arithmetic = std::is_arithmetic_v;

template
requires arithmetic
T add(T const a, T const b) { return a + b; }

int main() {
add("a", "b");
}
< /code>
Те же компиляторы с одинаковыми флагами компиляции говорили мне: «Добавить»: не найдена совпадающая перегруженная функция < /p>
Согласно стандарту C ++, простое требование в предложении требует только для проверки. Как я могу согласовать определение концепции с предполагаемым поведением книги?

Подробнее здесь: https://stackoverflow.com/questions/796 ... c-v-fail-t
Ответить

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

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

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

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

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