[過去ログ]
C++相談室 part164 (1002レス)
C++相談室 part164 http://mevius.5ch.net/test/read.cgi/tech/1683600652/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
285: デフォルトの名無しさん (ワッチョイ a901-UvLK) [] 2023/06/21(水) 04:29:46.61 ID:IDPPhD2V0 >>260 あー本来グローバルも対象になるのか、適当こいてスマソ だが>>248で質問者が言ってるように、元のコードで順序を変えてもダメなのよ 何故か考えてはちみつのコードを以下のようにしたら同様に通らなかった namespace ns { template <class T = int> struct foo{}; // added struct hoge{}; int operator +(const hoge &x, const hoge &y) {return 1;} }; ns::foo<> operator+(const ns::foo<>& x, const ns::foo<>& y) { return ns::foo<>(); } namespace ns { template <class T> void bar(const T&) { T() + T(); } }; int main() { bar(ns::foo<>()); } すでに名前空間内に同名の関数があった場合はダメっぽい http://mevius.5ch.net/test/read.cgi/tech/1683600652/285
287: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) [sage] 2023/06/21(水) 10:22:19.76 ID:3HBFHOpK0 >>285 名前探索 (name lookup) は狭い名前空間から探索していって 合致する名前があればそれより外側に同名の関数があっても オーバーロード解決に参加しない。 わかりやすい例で言えばメンバ関数は非メンバより優先されるし、 メンバ関数内にひとつでも候補が見つかった時点で非メンバ関数は一切考慮に入らなくなる。 void foo(void) {} struct bar { void baz(void) { // この foo は bar::foo のこと // 名前が見つかった時点でそれより外の名前空間は見に行かないので // 引数が合わなくても他の候補は試みられずエラーになる。 foo(1); } void foo(void) {} }; http://mevius.5ch.net/test/read.cgi/tech/1683600652/287
291: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) [sage] 2023/06/21(水) 12:13:25.08 ID:3HBFHOpK0 >>285 の例は using を使う形でも解決できる。 (設計意図によってはそれが妥当かどうかわからんけど。) namespace ns { struct foo {}; struct hoge {}; int operator+(const hoge& x, const hoge& y) { return 1; } }; ns::foo operator+(const ns::foo& x, const ns::foo& y) { return ns::foo(); } namespace ns { template <class T> void bar(const T&) { using ::operator+; // グローバルな operator+ をオーバーロード候補として参加させる T() + T(); } }; int main() { bar(ns::foo()); } テンプレートを見る機会がよくあるなら std::begin を using している事例は見たことがあると思う。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/291
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.048s