次の方法で共有


コンパイラ エラー C3615

constexpr 関数 'function' の結果が定数式になることはありません

関数 function は、コンパイル時に constexpr として評価できませんでした。 constexpr であるためには、関数は他の constexpr の関数を呼び出すことしかできません。

Visual Studio 2017 では、条件付きで評価する演算の左のオペランドが constexpr コンテキストで無効である場合、正しくエラーが発生します。 次のコードは、Visual Studio 2015 ではコンパイルされますが、Visual Studio 2017 ではコンパイルされません。

// C3615.cpp
// Compile with: /c

template<int N>
struct myarray
{
    int size() const { return N; }
};

constexpr bool f(const myarray<1> &arr)
{
    return arr.size() == 10 || arr.size() == 11; // C3615 starting in Visual Studio 2017
}

エラーを修正するには、array::size() 関数を constexpr として宣言するか、f から constexpr 修飾子を削除します。