[解決済み] BjarneはADLのこの例について間違っていますか、それとも私はコンパイラのバグを持っていますか?
質問
今読んでいる本 C++プログラミング言語 第4版 (傍点 ビャーネ・ストラストラップ ) について 引数依存ルックアップ . 以下はその引用です(26.3.6, Overaggressive 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
. 本の中の文章についての質問でした。として
Lachlan Easton
がすでに言っているように、単なるタイプミスではありません。段落全体が(おそらく)間違っているのです。他の(あまり知られていない)著者の本であれば、この種の誤りを受け入れることができますが、Bjarneが書いた本であるため、私は疑っていました(そして今も疑っています)。
どのように解決するのですか?
コンパイラのバグではありません。ADLは
関数
ではなく
引数
.
operator<<
は、ここでADLを通してパラメータを見て見つけた関数です。
std::cout
と(本来は)
std::endl
.
関連
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】coutはstdのメンバではない
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】Enterキーを押して続行する
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] 配列のベクトルを扱う正しい方法