読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

ADLにtypedefは使えない

Boostのintrusive_ptrのadd_refやreleaseをグローバル空間に置きたくないけれど、COMのインターフェイスの型はグローバル空間にあるから自作名前空間内にある型と違ってADLが効かない、どうしたものかというわけです。typedefがひょっとして解決してくれるかとか思ったのですが、

namespace foo {
// 駄目もとでtypedef
typdef int int_t;

// 構造体なら或いは?
struct int_struct {
  typdef int type;
};

void hoge1(int_t i) {
}

void hoge2(int_struct::type i) {
}
}

int main() {
  const foo int_t i1 = 0;
  hoge1(i1); // 駄目
  const foo::int_struct::type i2 = 0;
  hoge2(i2); // 駄目
  return 0;
}

どうも駄目みたいです。まぁ残当ですかね。Dだともっと強力な?typedef的なサムシングがあると聞いたのですが、どうなんでしょう。