是否可以实现以下行为?
template<typename T>
struct X {
template<const bool Condition>
struct Y;
template<>
struct Y<true> {
typedef T Z;
};
};
template<typename T>
struct A {
typedef typename T::Y<true>::Z B; // Error
};
int main() {
X<float>::Y<true>::Z value = 5.0f; // OK
A<X<float>>::B value2 = 5.0f; // Desired behaviour
return 0;
}
答案 0 :(得分:1)
尝试
typedef typename T::template Y<true>::Z B;
适用于gcc 4.7.2
虽然gcc抱怨结构中的完全特化,但我必须添加一个虚拟参数。