gpt4 book ai didi

c++ - 在基本类型上使用 std::declval

转载 作者:行者123 更新时间:2023-11-30 02:52:16 30 4
gpt4 key购买 nike

以下代码在模板参数T时编译失败是基本类型,例如 int (在 gcc 4.8 上)。这是符合标准的行为吗?我对std::declval的理解是它总是解析为 T&&T& .

template <class T>
void foo(T&& val)
{
std::cout << noexcept(std::declval<typename std::decay<T>::type>() = val);
}

struct bar { };
bar b;
foo(b); // okay

int a;
foo(a); // error: using xvalue (rvalue reference) as lvalue

错误发生在赋值点valstd::declval表达。

如果我删除 std::decay 就可以了并使用 std::declval<T>直接,但我不确定为什么。腐烂的类型应该是 int所以 std::declval<int>()返回类型应该是 int&&不应该吗?

最佳答案

您正在尝试分配给一个右值。 std::declval<int>()正确返回类型 int&& .它没有名字,所以它是一个 int 类型的右值(更准确地说,xvalue) .然后你试图分配 val进入这个右值,这对于基本类型是非法的。

这是一个 live example以简化形式演示问题(没有 declval )。

关于c++ - 在基本类型上使用 std::declval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19112471/

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