我试图理解指定 C++ require 子句的不同方式。我需要一些更深入的理解,而不是指定约束的技术解决方案。
想一个模板函数:
template<typename T>
T func(T t) {
return t;
}
可以添加一个简单但无用的 require 子句:
template<typename T>
requires true
T func(T t) {
return t;
}
我可以这样调用这个函数:
foo(1);
据我了解https://en.cppreference.com/w/cpp/language/constraints#Requires_clauses我还可以使用常量 lambda 表达式,因为 lambda 表达式也是主要表达式(https:// en.cppreference.com/w/cpp/language/expressions#Primary_expressions)。
template<typename T>
requires [] { return true; }
T func(T t) {
return t;
}
使用 VS2019 / VS2022 中的 cl.exe 我收到类似于(翻译)的编译错误:
错误 C7607:原子约束必须是 Bool 类型的常量表达式...
我尝试使用
constexpr
但没有成功。
我做什么不想要:
requires ([] { return true; }())