【发布时间】:2020-01-20 18:08:27
【问题描述】:
仅供参考:C++17 std::is_invocable_v 完全符合我的预期。
想象一个概念来检查是否可以使用特定参数类型调用可调用对象:
template <typename Fn, typename... Args>
concept has_request_interface = requires (Fn request, Args&&... args)
{
{ std::invoke(request, std::forward<Args>(args)...) }-> Status;
};
对
template <typename Fn, typename... Args>
concept has_request_interface = requires (Fn request, Args... args)
{
{ std::invoke(request, args...) }-> Status;
};
在 requires 表达式中使用完美转发有意义吗?
在我看来答案是肯定的,因为请求可调用对象可能期望某些参数的右值。
但是requires (Fn request, Args... args) 是否表现为关于args... 的左值性质的函数声明?
【问题讨论】:
标签: c++ c++20 c++-concepts