Type Traits ExtensionがBoostに採択されました

Boost.Type Traits Extension by Frederic Bron

Type Traits Extension by Frederic Bron - Review summary and decision


Type Traits Extensionが採択されました。
この拡張は、Boost.TypeTraitsライブラリに、以下の37の演算子に対応する新たなtraitsを追加します:

  • binary: ==, !=,<,<=,>,>=, , +, -, *, /, %, +=, -=, *=, /=, %=, &&, ||, ,&, |, ^,<<,>>,&=, |=, ^=,<<=,>>=
  • prefix: ++, --, +, -, !, ~, *
  • postfix: ++, --

戻り値型がある型に変換可能であるならば、それぞれのtraitsはそれを検出することができます。


このライブラリの主な争点は、これらの演算子に対応するtraitsの名前です。現時点では、has_operator_lessのようにしてoperator<を持つ型かどうかを判定できるようになっていますが、これは他にも、is_less_comparableや、is_callableのような名前の選択が考えられます。これは現在もなお議論中のようですが、ひとまず実装としては問題ないということで採択が決定しました。


以下、レビュー結果:


Frederic BronのType Traits Extensionのレビューが先週終了した。
これまでのところ、BoostにType Traits Extensionを入れる投票を行い、全てがYESである7つのレビューが得られた。

したがって、Type Traits Extensionのレビュー結果はACCEPTEDである。


提案は以下を含んでいる:

  • いくつかの実装の整理とリネーム。detailクラスに、xx1, xx2のような数の付いた名前を使わず、明確な意味を持つ名前空間に入れる。tag, tag2のような名前は、check_pass, check_failのような名前にするべきかもしれない。
  • traits呼び出しのcv-ref修飾を受け付けることは重要である。これはFredericによって指摘された。
  • Fredericは、デフォルトとしてdont_check型を使用することにより、有効な戻り値型としてのvoidの検出を維持することを許可した。
  • traitsのいくつかの小さな例で、「maybe_print関数は、適切なoperator<< ostreamオーバーロードが存在していればその値を出力する ... 」 このような例では、enable_ifや他のオーバーロード方法の利用を示すこと。
  • 繰り返し発見された主要な提案は、Protoや他のBoostライブラリなどにもある、標準の命名に関する演算子traitsの名前の選択である。この話題は未だにホットな話題である。命名スキームの合意への代案は、一般的に用いられる演算子traitsのエイリアスという形で提案された。この問題は私がbikeshed-color議論を越えて考える。もしFredericがこれをステップアップして合理化された答えを提供できるならば私はそれがより良いポイントであると考える。現在の状況は以下のようになっている:

名前空間オプションは、標準がこの方法を選択しなかったのでアウト、
・Fredericと何人かが、Protoの命名スキームに賛成しているようだ(negate(否定)とpre/post演算子などの多少の問題はある)
・共通のプレフィックス問題はまだ未決
・std::命名のように、全ての演算子がそこにあるわけではないので、制限されるようだ。