Warum nimmt std :: result_of einen (nicht verwandten) Funktionstyp als Typargument?

Mir ist klar, dass "Warum sind die Dinge so, wie sie sind" Fragen normalerweise nicht die besten sind, aber es gibt viele Leute auf SO, die auf Standard-Komitee-Diskussionen eingestellt sind. Ich hoffe, dass dies sachlich beantwortet werden kann, da ich zu Recht neugierig bin, was passiert die Antwort ist.

Grundsätzlich habe ich lange gebraucht, um herauszufinden, was los warstd::result_ofDie Vorlagensignatur, die ich zum ersten Mal gesehen habe: Ich dachte, es wäre ein völlig neues Konstrukt für Vorlagenparameter, das ich noch nie zuvor gesehen hatte.

template< class F, class... ArgTypes >
class result_of<F(ArgTypes...)>;

Nachdem ich einige Zeit darüber nachgedacht hatte, wurde mir klar, was das eigentlich war:F(ArgTypes...) ist ein Funktionstyp, aber es istnicht der Typ der Funktion, deren Ergebnistyp ausgewertet wird (das ist nurF): Dies ist die Art einer Funktion, die ausgeführt wirdArgTypes... Argumente undzurückkehren ArtF.

Ist das nicht ... seltsam? Irgendwie hackisch? Weiß jemand, ob das Komitee jemals Alternativen besprochen hat, wie zum Beispiel die folgenden ...

template< class F, class... ArgTypes >
class result_of<F, ArgTypes...>;

?

Ich denke, es gibt Situationen, in denen das zweite Konstrukt nicht so einfach verwendet werden kann wie das erste, aber welche?

Ich versuche nicht, darüber ein Urteil zu fällen, aber es ist nur so, dass es mich zu Recht verwirrt hat, als ich es das erste Mal gesehen habe. Deshalb bin ich neugierig, ob es einen guten Grund dafür gibt. Mir ist klar, dass ein Teil der Antwort einfach "weil Boost es so gemacht hat" sein könnte, aber dennoch die verbleibenden (sachlichen) Fragen offen lassen ...

Gibt es einen technischen Grund, warum Boost diese Syntax wählt, um Typinformationen zu verschlüsseln, anstatt irgendeine Alternative?

Gab es eine Diskussion im C ++ 11-Komitee darüber, wie angemessen es war, dies angesichts dessen zu standardisieren?std::result_of kann in Bezug auf implementiert werdendecltype ziemlich leicht sowieso?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage