【发布时间】:2015-07-27 14:02:24
【问题描述】:
使用以下代码可以明确问题:
#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。有人可以向我解释一下吗?
【问题讨论】:
-
@Barry: It's actually not :P 尽管有运营商。
-
错误信息是什么,OP?
-
@imreal 该类型未定义
<运算符。它是一个非成员函数 -
@imreal:我不知道。这让我很惊讶。
-
@imreal:嗯,嗯,有一个概念列表,它们的要求意味着 LessThanComparable 不是其中之一?
标签: c++ c++11 language-lawyer implicit-conversion reference-wrapper