私はC ++プログラミング言語第4版(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
定義されていることに気付きstd
ます。したがって、それは探しendl
でstd
、それ(内を検索します<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
です。質問は本の中のテキストについてでした。ラクランイーストンはすでにそれだけでタイプミスではない、と述べました。段落全体が(おそらく)間違っています。その本が他の(あまり知られていない)著者によるものであれば、私はこの種の誤りを受け入れることができますが、それがビャーネによって書かれたので、私は疑っていました(そして今でもそうです)。
std::endl
バグなし