Проблема понятна с помощью следующего кода:
#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. Может ли кто-нибудь объяснить это мне?