0

以下のコードを gcc でコンパイルすると、次のエラーが発生します。'i ' は定数式に表示できません。

どうしてこれなの?

#include <iostream>

using namespace std;
template<int p>
class C
{
public:
    void test();
};

template<int p>
void C<p>::test()
{
    p = 0;
}

char const *const p = "hello";
int main()
{
    const int i = (int)p;
    C<i> c;
}
4

1 に答える 1

2

変数iは であるため、実行時に可変ではありませconstんが、コンパイル時に評価されないため、「定数式」ではありません。

(int)p;ですreinterpret_cast。整数定数式に を含めることはできませんreinterpret_cast。明示的に禁止されています (§5.19/2):

条件式は、評価される可能性のある部分式 (§3.2) として次のいずれかが含まれていない限り、コア定数式ですが、論理 AND (§5.14)、論理 OR (§5.15)、および条件付き (§5.16) 操作の部分式です。評価されないものは考慮されません [注:オーバーロードされた演算子は関数を呼び出します。—<em>end note ]:

— [...]

— a reinterpret_cast(§5.2.10);

— [...]

于 2012-08-16T03:56:06.117 に答える