我有这个功能模板:
template<typename Collection, typename T>
void insertColElement(Collection col, const T& element, std::true_type)
{
col.insert(col.end(), std::move(element));
}
Run Code Online (Sandbox Code Playgroud)
如果T是可移动构造的,则调用它.现在我想用Collection = std::vector<..>和T = 调用这个函数std::pair<std::unique_ptr<..>, bool>,但编译器抱怨unique_ptr和pair的删除拷贝构造函数.我已经尝试使用emplace并单独移动第一个和第二个,但编译器仍然想调用复制构造函数.
编辑:
以下是所有相关的代码段:
template<typename Collection, typename T>
void insertColElement(Collection col, T&& element, std::true_type)
{
col.insert(col.end(), std::forward<T>(element));
}
template<typename Collection, typename T>
void insertColElement(Collection col, T& element, std::false_type)
{
static_assert(std::is_copy_constructible<T>::value,
"Serialization: Collection type is neither copy nor move constructable");
col.insert(col.end(), element);
}
template<typename Archive, typename Collection>
inline void loadCollection(Archive& ar, Collection& col)
{
int size;
ar >> …Run Code Online (Sandbox Code Playgroud)