0

是否有可能实现以下行为?

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;
}
4

1 回答 1

1

尝试

typedef typename T::template Y<true>::Z B;

它适用于 gcc 4.7.2

尽管 gcc 抱怨结构内部的完全专业化,但我不得不添加一个虚拟参数。

于 2013-03-05T06:23:51.593 回答