Следующий код является примером использования условия requires
:
#include <type_traits>
template <typename T>
requires std::is_integral_v<T>
void take_integral(T value);
Он принимает выражение, которое преобразуется в значение bool
(в данном случае std::is_integral_v<T>
), и работает как и ожидалось. Однако, когда такое выражение отменяется с помощью оператора !
, это приводит к ошибке компиляции:
#include <type_traits>
template <typename T>
requires !std::is_integral_v<T>
void take_integral(T value);
Диагностика c из G CC:
<source>:4:12: error: expression must be enclosed in parentheses
4 | requires !std::is_integral_v<T>
| ^~~~~~~~~~~~~~~~~~~~~~
| ( )
Compiler returned: 1
Диагностика c от Clang:
<source>:4:12: error: parentheses are required around this expression in a requires clause
requires !std::is_integral_v<T>
^~~~~~~~~~~~~~~~~~~~~~
( )
1 error generated.
Compiler returned: 1
Зачем здесь скобки?