【发布时间】:2017-03-01 15:56:53
【问题描述】:
我有一个名为Vec 的自制模板类,它是std::vector<T> 的一个苍白阴影
为避免重新发明轮子,assign 的标头重载复制自:std::vector::assign
..所以
作为测试Str 类的一部分,..test 代码也针对std::vector<T> 运行以确保等效输出...
如果使用std::vector<T>,那么编译器将选择正确的重载:
但是,当使用Vec<T> 时,编译器会坚持选择不正确的重载:
在使用前将 args 转换为左值有一个明显的解决方法:
问题:
鉴于Vec<T> 和std::vector<T> 都为它们各自的assign 使用相同的标头重载...std::vector<T> 如何在不混淆编译器的情况下实现右值arg?
【问题讨论】:
-
向我们展示有问题的代码,而不是您假设/期望的代码。
-
帖子已经显示了有问题的代码。我没有做任何假设,也没有期望。
-
提供你的实现的minimal reproducible example。
标签: c++ overloading rvalue ambiguous