【发布时间】:2020-07-09 16:12:20
【问题描述】:
以下代码是requires-clause 的使用示例:
#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);
来自 GCC 的诊断:
<source>:4:12: error: expression must be enclosed in parentheses
4 | requires !std::is_integral_v<T>
| ^~~~~~~~~~~~~~~~~~~~~~
| ( )
Compiler returned: 1
来自 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
为什么这里需要括号?
【问题讨论】:
标签: c++ templates c++20 c++-concepts