在模板参数推导过程中丢失限定符

Losing qualifiers during template argument deduction

本文关键字:过程中 参数      更新时间:2023-10-16

由于我使用的是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"确实更改了它的构造函数参数,以接受非常量引用,但文档没有相应的更新。感谢大家的帮助!