Scott Meyers の『Effective Modern C++ 』を読んでいて、 Deducing Typesの章で彼が提供している例を自分のマシンで試しています。
彼はこの機能を提供します:
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
、両端キューの最初の要素として表示されます。彼の説明によると、このコードは間違っています。なぜここで機能するのですか?私は何が欠けていますか?