我想通过从一种或另一种类型派生来启用或禁用类中的某些功能。在我为导出条件引入另一个级别的间接之前,一切都运行良好。
例子:
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)有问题还是这是正常行为?