予想通り、問題なく以下のサンプルをコンパイルできます
// first_sample.cpp
struct sample_struct
{
constexpr int
sample_method()
{ return 5; }
};
int main()
{
sample_struct sample_object;
constexpr int sample_variable = sample_object.sample_method();
return 0;
}
しかし、次の理由で次のサンプルをコンパイルできません
'this' は定数式ではありません
// second_sample.cpp
struct sample_struct
{
constexpr int
sample_method_first()
{ return 5; }
void
sample_method_second()
{ constexpr int sample_variable = sample_method_first();
/* Do something with sample_variable */ }
};
int main()
{ return 0; }
私はこの「問題」を解決する方法をすでに知っているので、解決策を求めていません。別のメソッド内で同じ constexpr メソッドを呼び出すことが許可されていないのに、非 constexpr オブジェクトから constexpr メソッドを呼び出すことが許可されている理由の合理的な説明を求めています(非 constexpr 'this' から)。