3
#include <iostream>
int foo(int x) {
if constexpr (std::is_same_v<decltype(x), std::string>) {
x = std::string();
}
}
int main(void)
{ return 0; }
であれば:constexprのこのコードはGCC 7もクラン5のいずれかにコンパイルされない非テンプレートタイプ
error: cannot convert ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to ‘int’ in assignment
x = std::string();
false
に評価すべきブランチ場合、参照ラインがconstexprの中にあるので、プログラムをコンパイルしてはいけませんか?
これは期待された動作ですが、驚くほど十分です。 'constexpr'がこのように動作しない場合、テンプレートパラメータの場合のみ(大まかに) – Justin
[this](https://stackoverflow.com/q/46512248/2069064)または[this](https:// stackoverflow)を参照してください。 com/q/47000914/2069064) – Barry
私はあなたに同意します。あなたが書いたコードが動作するように指定されていなかった理由は分かりません。私はそれが驚くべきことだと思う。ビルド設定やターゲット固有の設定など、望ましいことがあるのは確かです。 – Justin