我想通过从一种类型或另一种类型派生来启用或禁用某些类中的某些功能。一切正常,直到我引入另一个间接层来推导条件。
示例:
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)的问题还是这是正常的行为?
答案 0 :(得分:0)
使用GCC 4.7(在Mac OS上)似乎工作正常。我将把它作为编译器的缺点。如果您愿意,也许可以在Windows上试用GCC。