argument-dependent-lookupについて、The C++ Programming Language, 4th Edition (by Bjarne Stroustrup ) を読んでいます。これが引用です(26.3.6、過度に攻撃的なADL):
引数依存のルックアップ (ADL と呼ばれることが多い) は、冗長性を避けるために非常に役立ちます (14.2.4)。例えば:
#include <iostream> int main() { std::cout << "Hello, world" << endl; // OK because of ADL }
引数依存のルックアップがなければ、
endl
マニピュレータは見つかりません。<<
そのままで、コンパイラは への最初の引数がostream
in で定義されていることに気付きますstd
。したがって、endl
instd
を検索して見つけます ( in<iostream>
)。
コンパイラによって生成された結果は次のとおりです (C++11 モード)。
prog.cpp: In function ‘int main()’:
prog.cpp:4:36: error: ‘endl’ was not declared in this scope
std::cout << "Hello, world" << endl;
^
これは、コンパイラまたは書籍のバグです。基準は何と言っていますか?
アップデート:
少し明確にする必要があります。正しい答えは を使用することstd::endl
です。質問は本のテキストについてでした。Lachlan Eastonが既に述べたように、これは単なるタイプミスではありません。段落全体が(おそらく)間違っています。本が他の(あまり知られていない)著者によるものであれば、この種の誤りを受け入れることができますが、Bjarneによって書かれたので、私は(そして今でも)疑問を抱いていました.