通常、「なぜそうなのか」という質問は最善ではないことを理解していますが、標準委員会の議論に同調している SO には多くの人がいます。答えは。
基本的に、 のテンプレート シグネチャを最初に見たとき、何が起こっているのかを理解するのに長い時間がかかりました。これは、これstd::result_of
まで見たことのないテンプレート パラメーターのまったく新しい構造だと思いました。
template< class F, class... ArgTypes >
class result_of<F(ArgTypes...)>;
しばらく考えた後、これが実際に何であるかに気付きました:F(ArgTypes...)
は関数型ですが、結果の型が評価される関数の型ではありません(それは単に です):引数をF
取り、型を返す関数の型です。ArgTypes...
F
これは…おかしくないですか?ちょっとハック?委員会が次のような代替案について話し合ったことがあるかどうか知っている人はいますか...
template< class F, class... ArgTypes >
class result_of<F, ArgTypes...>;
?
2 番目のコンストラクトが最初のコンストラクトほど簡単に使用できない状況がある可能性はあると思いますが、どのような状況ですか?
私はこれについて判断を下そうとしているわけではありませんが、これを初めて見たときは正当に混乱しただけなので、正当な理由があるかどうか知りたいです. 答えの一部は単純に「Boostがそうしたから」かもしれないことは理解していますが、それでも残りの(事実上の)質問は残っています...
ブーストがこの構文を選択して、代替ではなく型情報をエンコードする技術的な理由はありますか?
とにかくかなり簡単に
std::result_of
実装できることを考えると、これを標準化することがどれほど適切であるかについて、C++11委員会による議論はありましたか?decltype