c++ - 转发引用的折叠
问题描述
给定代码
struct S{};
template <typename T>
auto foo(T&& t)
{
static_assert(std::is_same_v<T, std::remove_cvref_t<T>>);
}
void test()
{
const S s;
foo(s); // error
foo(S{});
S s2;
foo(s2); // error
}
T
将被推断为
S const&
S
S&
为什么T
不推断为
S const
S
S
为什么T
在左值情况下保留引用而不是在右值情况下?
解决方案
推荐阅读
- android - 如何将此结果四舍五入到小数点后 2 位代码示例
- javascript - HTML5 jPlayer 自动重新连接
- python - 无需在 Open3D 中打开 Visualizer 即可捕获深度图像?
- django - Django:Save方法在另一个模型中保存总共3行
- node.js - Firebase:如何在没有父键的情况下获取子集合中的文档
- python - 如何在meteostat的函数Point(lat=float,lon=float)中使用填充有浮点数的列?Python
- android - 带有 Google Fitness API 的 Android Wear 操作系统
- javascript - React map 函数返回当前对象和新属性
- c++ - 如何解决突然终止自身的while循环?
- python - 在 Django 3 中根据类别 slug 显示产品