The issue is clear with the following code:
#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) << '
';
return 0;
}
If I use the commented std::vector<int> a, b;
instead of int a = 0, b = 0;
, then the code does not compile on any of GCC 5.1, clang 3.6, or MSVC'13. In my opinion, std::reference_wrapper<std::vector<int>>
is implicitly convertible to std::vector<int>&
which is LessThanComparable, and thus it should be LessThanComparable itself. Could someone explain this to me?