タグ

ADLに関するcrafのブックマーク (5)

  • Candidate functions [temp.dep.candidate]の異常な制限

    以下のコードは、規格では、undefined behaviorである。ill-formedかもしれない。 template < typename T> void f(T x) { g(x) ; } void g(int) { } int main() {// undefined behavior // g(int)は見つからないかもしれない。 f(0) ; } なぜ、undefined behaviorであり、ill-formedかもしれないのか。undefined behaviorなら、ill-formedになっても問題はない。しかし、あえてill-formedかもしれないというのは、このundefined behaviorの定義によるものだ。曰く、「ill-formedの場合、undefined behaviorである」と。つまり、来ならill-formedであるプログラムが、und

    craf
    craf 2010/03/05
  • ちょっとだけマイナーなSTLの話 - d.y.d.

    21:23 09/11/29 ドラクエ3 ドラゴンクエスト III モバイル版 が配信開始されたと聞いてはプレイせずにはいられない、ということで、さっきクリア。 内容は 「SFC版のベタ移植 - すごろく場 + AI戦闘」 ですね。 すごろく場が減った分、限定アイテムが他の場所に移動 (パワーベルト・ドラゴンテイル・ドラゴンローブ・グリンガムのムチが小さなメダル賞品に。 光のドレスがゾーマ城の宝箱に。雷神の剣も宝箱だった気がする。あと、小さなメダルの総数が110枚で変化無しらしいので、 すごろく場にあった分が通常マップに押し出されて、ところてん式に押された炎のブーメランもメダル賞品化)。 不思議なボレロと女神の指輪は見てない。なくなった? AIは、マヌーサ/ラリホー/マホトーン辺りを効く相手にだけ積極的に使ってくれるので参考になる&便利。 勇者もAI駆動にできるモードが欲しかった 細かいと

    craf
    craf 2009/11/14
    ADLが無いとHello, Worldも書けないってのが面白いですね
  • reference_closureの継承 - かそくそうち

    http://d.hatena.ne.jp/Cryolite/20080328#p1 のk.inabaさんのコメントにあるようにN2529に書いてありました。 オーバーロードの解決のためだったんですね。 懸念された最適化の問題も、 class F : public std::reference_closure<int (int)> { private: typedef std::reference_closure<int (int)> base_type; public: // reference_closureから復元用 explicit F(void* frame) : base_type(&F::invoke, frame) , count(*(static_cast<int*>(frame) - 2)) // [ EBP - 8] { } // ラムダ式用 F(void* fram

    reference_closureの継承 - かそくそうち
  • vc-9.0のADLのバグ - p_stade;

    親のnamespaceが子のnamespaceの型にassociateされてしまう これによってboost::noncopyableを継承する全ての型はboost名前空間にassociateされると思われる #include <boost/detail/lightweight_test.hpp> #include <boost/noncopyable.hpp> namespace xxx { namespace nested { struct aaa {}; } void begin(nested::aaa) {} } namespace nnn { void begin(xxx::nested::aaa) {} } namespace boost { template<class X> void the_end(X& x) {} } namespace my { struct ccc :

    vc-9.0のADLのバグ - p_stade;
  • ADL簡易解説 - Faith and Brave - C++で遊ぼう

    リンクだけだとさみしいので、ADLの簡単な解説を書きます ADL(Argument Dependent name Lookup)とは、引数の型によって呼び出す関数を探索する仕組みです namespace ns { struct hoge {}; void foo(const hoge& h) {} } // namespace ns int main() { ns::hoge h; foo(h); // usingもusing namespaceも使わずにns::fooが呼び出せている! return 0; } 名前空間内の演算子呼び出しは、この仕組みがないとできません (できなくはないけど、==と書く代わりにstd::operator==(...)とか書かないといけない) ADLを回避するには以下のような、特殊な名前空間に隠す方法があります namespace ns { namespac

    ADL簡易解説 - Faith and Brave - C++で遊ぼう
  • 1