c++のADLについて
読書会メモ
- ExceptionalC++ 5章 pp137..150
- 項目31/32
- 名前の自動照合とインターフェース原則 Part1/2
ref for ADL:ADL簡易解説 - Faith and Brave - C++で遊ぼう
ADL*1について。
c++の関数探索は、引数の属するnamespaceも含まれるとの事*2
#include <iostream> namespace A { struct X{}; void g(X){ std::cout <<"A::g()"<<std::endl; } } namespace B { void g(A::X x){ /* どちらのg()を呼び出せばよいか曖昧のためコンパイルエラー */ //g(x); // qr_742687q.cpp:12:8: error: call of overloaded ‘g(A::X&)’ is ambiguous /* B::g()が呼ばれるため、無限再帰 */ //(g)(x); // infinite recursive error //B::g(x); // infinite recursive error /* A::g()が呼ばれる */ A::g(x); //=> A::g() } } int main(int argc, char *argv[]) { struct A::X x; B::g(x); return 0; }
ってか、5章の残りページ「名前の自動照合とインターフェース原則」Port3とPart4なのか><
ADL関連が続くのか。まあ中途半端な感じだったし、続くか〜。