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来实现。您可以查看您最喜欢的标准库实现的标题以了解详细信息。向我们展示有问题的代码,而不是您假设/预期的代码。文章已经展示了有问题的代码。我没有做出任何假设,也没有任何期望。请提供您的实施情况。