Почему концепции 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

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