common_typeは規格によって実装方法がソースコードで示されている。しかし、GCC 4.8のlibstdc++では、なぜかcommon_typeにdecayを使っている。何故そんな規格違反な実装をするのかというと、現行のcommon_typeに深刻なバグがあるからだ。
C++ Standard Library Active Issues List: 2141. common_type trait produces reference types
現行の定義では、common_type<int, int>::typeがint&&になってしまう。これはもちろん大多数のユーザーが意図していない。しかも、std::unique_ptrのoperator <が壊れる。
というわけで、規格違反ながらも対策しなければならないのだ。
まともに動く実装があったコア言語機能を使うライブラリがこれだから、コンセプトがあのまま残っていた場合を考えると恐ろしい。あの当時の状況でコンセプトのライブラリがバグフリーだなんて考えられない。
No comments:
Post a Comment