昨日、誰かの質問に答える過程で、gcc 4.7.2にの逆として定義され<type_traits>
た trait template が含まれていることを発見して驚きました。std::is_explicitly_convertible<From,To>
std::is_constructible_convertible<To,From>
/// is_explicitly_convertible
template<typename _From, typename _To>
struct is_explicitly_convertible
: public is_constructible<_To, _From>
{ };
paper-trail を検索したところ、この特性は存在しないはずであることがわかりました。その バージョンの C++11 標準ライブラリに含めることに対してバグが発生し、gcc 4.8.0 で削除されました。
そのバグ レポートは、std::is_explicitly_convertible
(C++0x 標準の以前のドラフトで義務付けられていた) が2010 年にN3047によって標準ドラフトから削除されたことを指摘し
ました。
N3047 は、この回り道について次のように説明しています。
残りの問題は、影響を受けた
is_explicitly_convertible
特性をどのように修復するかです。基本的な選択肢は次のとおりです。
is_explicitly_convertible
現在の式に戻って修正し、 に依存しstatic_cast
なくなります。is_explicitly_convertible
is_constructible
- 標準から削除
is_explicitly_convertible
します。最初の選択肢が検討されましたが、「明示的に変換可能」が実際に何を意味するかについて、まったく異なる理解が存在することが判明しました。がこれを正しく表現していると信じている人も
static_cast
いれば、fixedis_constructible
の方がより良い意味を提供すると信じている人is_explicitly_convertible
もいます。したがって、この文書でis_explicitly_convertible
は、作業草案から を削除することをお勧めします。その特別な定義にはまだ何も依存していないため、これは今のところ害はありません。そして、その特性が依然として有用であることが判明した場合、標準の別の改訂版に追加される可能性があります.
from
この説明は、意見の不一致の当事者が、 type の式についてFrom
、static_cast<To>(from)
コンパイルされるがコンパイルされないケースを知っていたことを暗示しているようTo to{from};
です。またはその逆。
そのようなケースはありますか?
From
そうでない場合、ここで機能していたtoの static_castibility と from の構築可能性の違いを正式に (投機的にではなく) 説明できTo
ますか?To
From