我不明白为什么初始值设定项列表不能用在运算符的RHS上。试想一下:运算符的初始值列表和RHS
class foo { };
struct bar
{
template<typename... T>
bar(T const&...) { }
};
foo& operator<<(foo& f, bar const&) { return f; }
int main()
{
foo baz;
baz << {1, -2, "foo", 4, 5};
return 0;
}
最新锵(GCC以及)抱怨:
clang.cc:14:9: error: initializer list cannot be used on the right hand side of operator '<<'
baz << {1, -2, "foo", 4, 5};
^~~~~~~~~~~~~~~~~~~~~
^~~~~~~~~~~~~~~~
为什么C++标准禁止呢?或换句话说,为什么这会失败而不是
baz << bar{1, -2, "foo", 4, 5};
?
因为你没有在RHS上重载'operator <<'来获取'initializer_list <>'...你真正的问题是什么? – ildjarn 2012-07-10 19:28:21
我希望这相当于'baz << bar {1,2,3,4,5};',但似乎没有转换发生。 – mavam 2012-07-10 19:34:43
如果这是你想要的行为,也许你应该尝试给'bar'一个非单纯的'initializer_list <>'的非显式构造函数。 – ildjarn 2012-07-10 19:35:32