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

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

Сообщение Anonymous »

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

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

template
concept arithmetic = requires {
std::is_arithmetic_v;
};
< /code>
версия 2: < /p>
template
concept arithmetic = 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>

'Добавить': не найдено соответствующая функция перегруженного Значение.
Почему требуется подход к 
-основанного на основании здесь? Как я могу выровнять определение концепции с предполагаемым поведением книги?

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

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

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

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

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

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