ソースコードの唯一の違いが1つのconstexpr
の有無である2つのプログラムがある場合、プログラムの意味が変更される可能性はありますか?'constexpr'を追加して動作を変更できますか?
言い換えれば、可能であればconstexpr
を推測することを実際に難しくしようとコンパイラに指示するコンパイラオプションがある場合、既存の標準コードを破るか、またはその意味を悪く変更するでしょうか?
元の開発者が可能であればconstexpr
をC++ 11の前に書かれたコードに含めるのを忘れたというコードベースを扱うことを想像してみてください。コンパイラがあなたの作業に取り組むのを助けるためにconstexpr
を推測するのは素晴らしいことです。もちろん、おそらく、この推論を行うたびに警告し、後でconstexpr
を明示的に追加するよう促すべきでしょう。しかしそれはまだ有用である。私の心配は、物事を壊すかもしれないということですか?
これまでのところ、constexpr
の機能は暗黙的にinline
であり、inline
を追加すると状況が変わることがあります。たとえば、1つの定義ルールを破った場合などです。
たとえば、標準でマークされていない関数をconstexprとしてマークしてSFINAEを介して異なる動作を引き起こす可能性がある場合(これは最終的には許可されていませんでした)、[ -constexpr標準ライブラリ関数はconstexpr?](http://stackoverflow.com/q/27744079/1708801) –
ありがとう@ShafikYaghmour。相違を見つけるためにSFINAEでいくつかの実験を行ったが、できなかった。私は私の例があまりにも単純すぎると思う:) –
私は、[SFINAE breaks where example](http://stackoverflow.com/a/21319414/1708801)の定数式で未定義の振る舞いが異なるためです。これが合致しているかどうかにかかわらず、私はまだ回答がありません。まったく同じではありませんが、異なる実装がSFINAEをどのように壊すかを確認できます。 –