2013年11月20日水曜日

constexpr 勉強します

Visual C++ Compiler November 2013 CTP が公開され、constexpr が使えるようになったので、
早速自作テスティングフレームワークの iutest で試してみました。
iutest には以前から constexpr 対応を入れてきましたが、動作検証を全くしてませんでした。

見事に失敗
VC++ 2013 CTP の _MSC_FULL_VER は 180021114 なので、その場合は IUTEST_HAS_CONSTEXPR=1 とすることで、constexpr なコードになります。(なるはずだった…)

で、ビルドしたのですが内部エラーやら constexpr として評価できないよ~と言われてしまいました。。。
ひとまず、対象の関数は constexpr 外して一応ビルドは通るようになったのですが…
ご覧の有様。



warning C4592: 'iutest::detail::ToHex': 'constexpr' call evaluation failed; function will be called at run-time
コンパイルタイムになってないよ警告が出まくり…
constexpr を身に付けるため一から出直したいと思います。

2 件のコメント:

  1. 恐らく引数付きconstexpr関数の引数に実行時変数が渡されてコンパイル時に評価できないとこの警告が出るようです。例えばhttp://melpon.org/wandbox/permlink/9sZpwkplIKoPs7QLこのコードをCTPでコンパイルするとC4592が出ます。gccやclangでは特に警告が出なかったので、C4592はdisableしてしまっても問題ないかと思われます。

    返信削除
    返信
    1. コメントありがとうございます。ご指摘の通り、実行時変数を渡しているので警告が出るのは当たり前でした。constexpr はもっと書いて慣れたいとな、と思います。
      あと、C4592 は初心者としては嬉しい半分、うるさい警告なので、今は該当部分だけ disable にするようにしました。ありがとうございました。

      削除