gpt4 book ai didi

c++ - 为什么 is_invocable 与引用参数的工作方式不同?

转载 作者:行者123 更新时间:2023-12-03 06:56:22 26 4
gpt4 key购买 nike

它似乎只对这一种情况有所不同。这是怎么回事?

#include <type_traits>

void foo_value(int i){}
void foo_ref(int& i){}
void foo_cref(const int& i){}

int main()
{
static_assert(std::is_invocable<decltype(foo_value), int>::value);
static_assert(!std::is_invocable<decltype(foo_ref), int>::value); // what's wrong with this?
static_assert(std::is_invocable<decltype(foo_cref), int>::value);
static_assert(std::is_invocable<decltype(foo_value), int&>::value);
static_assert(std::is_invocable<decltype(foo_ref), int&>::value);
static_assert(std::is_invocable<decltype(foo_cref), int&>::value);
}

最佳答案

它说它不能那样调用...因为它确实是不可调用的。

尝试用一个 int prvalue 调用 foo_ref:

foo_ref(int{}); // does not compile

您会看到此代码无法编译,因为纯右值无法绑定(bind)到非 const 左值引用。

关于c++ - 为什么 is_invocable 与引用参数的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64883044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com