有人能解释一下为什么这两个(稍微)不同的代码片段工作方式相似吗?
使用其中一个有什么优势吗?
#1 一种方式
template<typename T>
concept bool Swappable = requires (T a, T b) {
{std::swap(a, b)} -> void;
};
#2 其他方式
template<typename T>
concept bool Swappable() {
return requires(T a, T b) {
{std::swap(a, b)} -> void;
};
};
第二个示例使用括号可交换并返回“要求”的原因是什么?
可能的主要:
int main() {
static_assert(Swappable<int>, "NOT SWAPPABLE!"); // Compiles when #1
// static_assert(Swappable<int>(), "NOT SWAPPABLE!"); // Compiles when #2
return 0;
}