В лоб (не работает):
template <typename T>
struct A
{
struct Tag1;
template <typename U>
struct B;
typedef B<Tag1> Tag1_t;
};
//fail
template <typename T> template <typename U>
struct A<T>::B<U>
{
};
//fail
template <typename T> template <typename U>
struct A<T>::B<typename A<T>::Tag1>
{
};
Через специализацию (работает):
template <typename T>
struct A
{
struct Tag1;
template <typename U>
struct B;
typedef B<Tag1&> Tag1_t;
};
//OK
template <typename T> template <typename U>
struct A<T>::B<U&>
{
};
Но 1е и 2е — это разные вещи. 1й вариант не возможен? Или я что-то не понимаю?
Здравствуйте, о_О, Вы писали:
о_О>В лоб (не работает):
о_О>о_О>template <typename T>
о_О>struct A
о_О>{
о_О> struct Tag1;
о_О> template <typename U>
о_О> struct B;
о_О> typedef B<Tag1> Tag1_t;
о_О>};
о_О>//fail
о_О>template <typename T> template <typename U>
о_О>struct A<T>::B<U>
о_О>{
о_О>};
о_О>
правильно так
template <typename T> template <typename U>
struct A<T>::B
{
};