2013-02-27 2 views
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; 
} 
+0

[Не подходит для меня] (http://liveworkspace.org/code/rIPFY$2) –

+0

Интересно. Использование MSVC 2012 (набор инструментов платформы 120) –

ответ

1

Попробуйте

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

Он работает в GCC 4.7.2

Хотя GCC жалуется на полную специализацию внутри структуры, так что я должен был добавить фиктивный параметр.

Смежные вопросы