c++のADLについて

 読書会メモ

  • ExceptionalC++ 5章 pp137..150
  • 項目31/32
  • 名前の自動照合とインターフェース原則 Part1/2


ref for ADL:ADL簡易解説 - Faith and Brave - C++で遊ぼう


ExceptionalC++読書会vol.12大阪


 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関連が続くのか。まあ中途半端な感じだったし、続くか〜。

*1:Argument Dependent name Lookup

*2:興味深いw=