在模板参数推导过程中丢失限定符
Losing qualifiers during template argument deduction
由于我使用的是C++11,我编写了自己的make_unique
函数,该函数采用可变模板参数包并将其转发给std::unique_ptr
构造函数。这适用于简单的数据类型。但是,我试图构造的对象通过const引用接受其他类型的对象。然而,在传递const引用时,我得到了"Conversions loss qualifiers",即
struct A {};
struct B { B(const A& ob) { ... } };
A ob;
auto ptr = make_unique<B>(ob); // error here
// Definition of make_unique below:
template <typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
return std::unique_ptr<T>{ new T{std::forward<Args>(args)...} } ;
}
我面临的错误是
Conversions loses qualifiers, cannot convert argument 1 from 'const A' to 'A &'.
如何解决错误?据我所知,模板类型的推导并不是我所期望的。
编译器:MSVC 2015,更新3
这很可能是一个编译器错误。它适用于clang、g++,也适用于MSVC 2017和2015的当前版本。所以我想更新您的Visual Studio应该可以解决这个问题。
的工作测试示例
事实证明,上面代码中的结构体"B"确实更改了它的构造函数参数,以接受非常量引用,但文档没有相应的更新。感谢大家的帮助!
相关文章:
- 函数调用中参数的顺序重要吗
- 是否删除在对象构造过程中创建的对象
- 如何在鼠标挂钩过程中检测拖动
- clang 插件:在编译过程中修改 AST
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- enable_if中参数包的大小问题
- Adafruit 羽毛RFM69HCW在使用过程中会冻结,需要硬重置
- C++ 中参数受限的可变参数模板函数
- 线程过程中的线程同步问题
- MySQL 连接器/C++.尝试在此过程中停止连接到数据库
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- 在调用过程中删除 std::函数
- 动态矩阵特征分解过程中的误差
- cmake在构建过程中使用另一个工具检测标志
- 在模板参数推导过程中丢失限定符
- 在构建过程中捕获所有编译器调用和命令行参数
- 如果condition_variable::wait_for-delay参数在等待过程中发生更改,该怎么办
- 如何确保在C++编译过程中,参数将被视为常量
- 运行过程中传递的参数的平方根