2013-03-21

common_typeとdecay

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

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.