使用以下代码可以清楚地解决问题:
#include <functional>
#include <iostream>
#include <vector>
int main() {
//std::vector<int> a, b;
int a = 0, b = 0;
auto refa = std::ref(a);
auto refb = std::ref(b);
std::cout << (refa < refb) << '\n';
return 0;
}
如果我使用注释std::vector<int> a, b;
而不是int a = 0, b = 0;
,则代码不会在任何 GCC 5.1、clang 3.6 或 MSVC'13 上编译。在我看来,std::reference_wrapper<std::vector<int>>
可以隐式转换std::vector<int>&
为 LessThanComparable,因此它本身应该是 LessThanComparable。有人可以向我解释一下吗?