是概念定义的主体还是需要阻止未评估的上下文?例如.我可以std::declval安全使用吗?
template<typename T>
concept bool SomeConcept = requires(T a) {
{ a.someFunction(std::declval<int>()) } -> int;
};
Run Code Online (Sandbox Code Playgroud)
Bar*_*rry 14
是.从[temp.constr.expr],措词的N4641:
一个表达式约束是指定上的形成要求的约束表达
E通过模板参数替换.如果替换产生E没有失败,则满足表达式约束.在表达式约束中,E是未评估的操作数(第5条).
所以使用declval应该没问题.
或者,您可以只创建所需类型的对象,因为在需求的上下文中,我们实际上并没有构造任何东西:
template<typename T>
concept bool SomeConcept = requires(T a, int i) {
{ a.someFunction(std::move(i)) } -> int;
};
Run Code Online (Sandbox Code Playgroud)