Re: std::reference_closure の存在意義

昨日のk.inabaさんのコメントにいったん納得しかけたけれど

void funcWithCallback(std::reference_closure<int(int)> const &f); // 定義は別のバイナリにある

void g()
{
  int i = 42;
  funcWithCallback([&](int j){ return i * j; });
}

これが std::reference_closure の目的なら,普通の関数ポインタから std::reference_closure への変換について何にも言及されていないのがやっぱり納得いかねー.
一方で,これが std::reference_closure の目的なら

その一方で、reference_closureは仮想関数を持たないので、クロージャオブジェクトの型Fをreference_closureから派生させることの必要性は感じません。 唯一の利点は、暗黙的にreference_closureへ変換できることでしょう。

この,参照経由でのみ環境にアクセスするクロージャオブジェクトの型 F だけを std::reference_closure から派生させるというのは理解できるというか,むしろ「reference_closure への暗黙の変換が欲しい.」暗黙の変換を可能にする機構としては別に継承以外にもたとえば変換コンストラクタテンプレートがありますけれど,これだとすべてのクロージャオブジェクトからの変換を許してしまう.「参照経由でのみ環境にアクセスするクロージャオブジェクトからのみ選択的に std::reference_closure への変換を許す」を C++ の言語機能で表現した結果,「参照経由でのみ環境にアクセスするクロージャオブジェクトのみ std::reference_closure から派生する」って表現になったんじゃないかにゃー,ってゆ〜.