我在阅读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
为双端队列的第一个元素。对于他解释的这段代码是错误的。它为什么在这里工作?我错过了什么?
它看起来像有使用'decltype',他说,它工作正常,其次是一个例子,而不'decltype'他说,这是不完全正确的例子。函数调用是后者的一部分。当然,还有第三种是“decltype(auto)”。 – chris
你的第二个片段调用函数'authAndAccess',而第一个片段定义'decltype_test_1'。我没有这本书,因此我不知道它是否是一个错字... – user463035818