C++ 不明确的/r值参数会导致编译器选择不正确的重载

C++ 不明确的/r值参数会导致编译器选择不正确的重载,c++,overloading,rvalue,ambiguous,C++,Overloading,Rvalue,Ambiguous,我有一个自制的模板类,名为Vec,它是:std::vector 为避免重新发明控制盘,assign的标题重载复制自:std::vector::assign …所以 作为测试Str类的一部分,…测试代码还针对std::vector运行,以确保等效输出 如果使用了std::vector,编译器将选择正确的重载: 但是,当使用Vec时,编译器坚持选择不正确的重载: 通过在使用前将参数转换为左值,有一个明显的解决办法: 问题: 鉴于Vec和std::vector对各自的assign使用相同的头

我有一个自制的模板类,名为
Vec
,它是:
std::vector

为避免重新发明控制盘,
assign
的标题重载复制自:
std::vector::assign

…所以

作为测试
Str
类的一部分,…测试代码还针对
std::vector
运行,以确保等效输出

如果使用了
std::vector
,编译器将选择正确的重载:

但是,当使用
Vec
时,编译器坚持选择不正确的重载:

通过在使用前将参数转换为左值,有一个明显的解决办法:

问题: 鉴于
Vec
std::vector
对各自的
assign
使用相同的头重载,
std::vector
如何在不混淆编译器的情况下实现右值arg

[sequence.reqmts]/14对于本条和第21条中定义的每个序列容器:

(14.2)-如果成员履行表格职能:

template <class InputIterator> // such as insert()
rt fx1(const_iterator p, InputIterator first, InputIterator last);
template <class InputIterator> // such as append(), assign()
rt fx2(InputIterator first, InputIterator last);
template <class InputIterator> // such as replace()
rt fx3(const_iterator i1, const_iterator i2, InputIterator first, InputIterator last);
模板//例如insert()
rt fx1(常量迭代器p,先输入迭代器,后输入迭代器);
模板//例如append()、assign()
rt fx2(先输入计数器,后输入计数器);
模板//例如replace()
rt fx3(常量迭代器i1、常量迭代器i2、先输入迭代器、后输入迭代器);
使用不符合输入迭代器条件的类型
inputierator
调用,则这些函数不应参与重载解析


这通常通过触摸SFINAE来实现。您可以查看您最喜欢的标准库实现的标题以了解详细信息。

向我们展示有问题的代码,而不是您假设/预期的代码。文章已经展示了有问题的代码。我没有做出任何假设,也没有任何期望。请提供您的实施情况。