2

クラスの一部の機能を、あるタイプまたは別のタイプから派生させて有効または無効にしたいと考えています。条件を導出するために別のレベルの間接化を導入するまで、すべてがうまくいきました。

例:

template<bool EnableB>
struct Traits1
{
    static const bool BEnabled = EnableB;
};

template<bool EnableB>
struct Traits2
{
    static const bool BEnabled;
};

template<bool EnableB>
const bool Traits2<EnableB>::BEnabled = EnableB;

struct A{};
struct B : public A{};

template<typename Traits>
struct C : public std::conditional<Traits::BEnabled, B, A>::type
{
};


int main()
{
    C<Traits1<true>> c1; //OK
    C<Traits2<true>> c2; //error C2975: '_Test' : invalid template argument for 'std::tr1::conditional', expected compile-time constant expression
}

内部クラスの初期化に問題はありませんが、Traitsクラス内で初期化できるのは整数型のみです...

この問題が発生する理由を教えてください。私のコンパイラ(VS2010)の問題ですか、それともこれは正常な動作ですか?

4

1 に答える 1

0

GCC 4.7 (Mac OS) を使用すると問題なく動作するようです。コンパイラの欠点であることに同意します。やる気があるなら、Windows で GCC を試してみてください。

于 2013-04-29T12:25:26.903 に答える