オーバーテクノロジー:How to know which functhion is actually called among Overloaded Function set at the Compilation Time?
@Cryolite http://twitter.com/yak_ex/status/15417094264 とか http://twitter.com/yak_ex/status/15414697483 辺りが起点になってます。
2010-06-05 01:07:36@yak_ex これは signature 的に調べるのか syntax 的に調べるのかどっちですかね? つまり, signature を厳密に知りたいのか,ある関数呼び出し構文が valid であるかを知りたいのか.
2010-06-05 01:10:31@Cryolite 自分自身に明確なユースケースがあるものじゃなかったりするので非限定で。signature 的に調べるのは難しそう、じゃ、syntax 的に調べるとこんな感じ?というのが現在の流れです。signature 的にもできるぜ!とか言われたらみんな痺れるかと。
2010-06-05 01:15:13@yak_ex "signature" という言葉は,厳密には,関数テンプレートの場合には「パラメタ,戻り値,テンプレートパラメタ」,関数テンプレートの特殊化の場合にはこれに加えて「テンプレート実引数」を含むんですが,どうしましょう? 3秒熟慮した結果,これはさすがに無理かも.
2010-06-05 01:25:51@yak_ex 基本的には大丈夫だと思いますけれど corner case では面倒なことはあると思います.たとえば C++0x で値型のパラメタ型を持っていてしかもそれが Copyable でも Movable でもない場合とか.
2010-06-05 01:34:44記事書いた: std::declval について: http://d.hatena.ne.jp/gintenlabo/20100604/1275669490
2010-06-05 01:38:52こんなトリックが・・・ RT http://twitter.com/kikairoya/status/15427899577 @Cryolite: @kikairoya f({}); [宮崎産を食べよう]
2010-06-05 01:39:01@Cryolite @kikairoya 不勉強ですみません。これってコピーコンストラクタは走らなくて initializer_list を受けるコンストラクタによって初期化されるだけってことですか?
2010-06-05 01:45:58@yak_ex initializer_list を受けるコンストラクタ (オーバーロード解決の順位は最下位だったはず) だけじゃなくて,一般に explicit の付いていない任意のコンストラクタを直接呼べます.
2010-06-05 01:52:35これを諦めれば, @kikairoya さんが言うように,非テンプレート非メンバ関数なら, declval で unevaluated なままオーバーロード解決して戻り値を decltype でゲットして関数ポインタへのキャストを SFINAE でいけるはず,知らんけど?
2010-06-05 02:01:54