2016-03-10 18 views
6

C++で汎用コードを扱う場合、std::identityファンクタ(std::negateなど)が非常に便利です。これが標準ライブラリにない特別な理由はありますか?標準ライブラリにstd :: identityが存在しない理由はありますか?

+3

これは、プレC++ 11ドラフトに存在していました。 IIRCでは、['std :: forward'](http://en.cppreference.com/w/cpp/utility/forward)のテンプレート引数の控除を防ぐために使用されていました。どこかに沿って、誰かが 'forward'に' remove_reference'が必要であることを認識しました。これはまた、非deducibleコンテキスト部分を処理しました。そして、おそらく 'identity'は他のものによって使われなくなったので落ちました。 – Praetorian

+0

興味深いことに、C++の実装の中には、内部的に 'std :: _ Identity'テンプレートを使用しているようです。 – JAB

答えて

2

std :: identityが導入された直後に、拡張機能として現れるstd :: identityのpre-cpp98定義との衝突から始めて、問題が発生し始めました。https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/vrrtKvA7cqo このサイトでは少し歴史があります。

+0

IDを使用すると、テンプレート引数の控除を防ぐことができます。 Boost :: clampはこのトリックを使用します。 https://stackoverflow.com/questions/41767240/what-is-stdidentity-and-how-it-is-usedも参照してください。 – gast128

関連する問題