相关疑难解决方法(0)

我们如何测试是否可以使用prvalue调用某个类型的表达式?

使用我们看到了新的is_invocable和花哨的新prvalues,它们并不是真正的价值.

这允许您创建一个对象而无需首先在逻辑上构造它,然后忽略构造.

我遇到了一个问题,std::is_invocable用于测试你是否可以调用某些内容,而prvalue规则似乎会发生冲突:

struct no_move {
  no_move(no_move&&)=delete;
  explicit no_move(int) {}
};
void f( no_move ) {}
Run Code Online (Sandbox Code Playgroud)

现在我们可以问一下是否f可以使用类型的prvalue调用no_move

f( no_move(1) )
Run Code Online (Sandbox Code Playgroud)

std::is_invocable< decltype(&f), no_move >不起作用,因为它使用的std::declval<no_move>()是xvalue,no_move&&而不是类型的prvalue no_move.

这是相同的,但保证省略使得一些函数可以用xvalue(即" T&&")调用,而其他函数可以用prvalues类型调用T.

有替代方案,还是我们必须发明自己的特性来处理这种情况?

(在一个理论的世界里std::declval<T>返回T,而不是T&&,is_invocable会的,我相信,做正确的事).

c++ c++17 prvalue declval invocable

15
推荐指数
2
解决办法
477
查看次数

标签 统计

c++ ×1

c++17 ×1

declval ×1

invocable ×1

prvalue ×1