我正在阅读 Scott Meyers 的Effective Modern C++,我正在我的机器上尝试他为推导类型一章提供的示例。
他提供了这个功能:
template <typename Container, typename Index>
auto decltype_test_1(Container& c, Index i) -> decltype(c[i])
{
return c[i];
}
然后它以这种方式使用该功能:
std::deque<int> d;
…
decltype_test_1(d, 5) = 10; // authenticate user, return d[5],
// then assign 10 to it;
// this won't compile!
说它不会编译。我尝试使用 MSVC,它确实可以编译。我在中写了以下内容main
:
std::deque<int> d;
d.push_back(0);
d.push_back(1);
d.push_back(2);
decltype_test_1(d, 0) = 10;
for each (auto item in d)
cout << item << endl;
我不明白它为什么会编译,最重要的是,它显示10
为双端队列的第一个元素。因为他解释这个代码是错误的。为什么它在这里工作?我错过了什么?