Здравствуйте Qiller, Вы писали:
Q>Привет All,
Q>Имеем шаблон вида
Q>Q>template <typename T1>
Q>class A {
Q>public:
Q> template <typename T2>
Q> class B {};
Q> template<>
Q> class B<int> {};
Q>};
Q>
Q>Хотя VC6/7 это кушают без проблем, стандарт (14.7.3/18) это дело запрещает
Q>Соответственно, gcc код не компилирует. Возможно ли это дело переписать
Q>как-то иначе без частичной специализации? Уж больно не хочется делать
Q>две версии: для vc и gcc...
Q>Happy Coding,
Q>Sergey.
У меня нет под рукой gcc, но попробуй написать так:
[ccode]
// это сам шаблон A<T1>::B<T2>
template<class T1, class T2>
class AB
{
public:
int i;
};
// это специализация на int A<T1>::B<int>
template<class T1>
class AB<T1, int>
{
public:
int j;
};
template<class T1>
class A
{
public:
// здесь нужно будет разобраться только с конструкторами
template<class T2>
class B : public AB<T1, T2>
{
};
};
int main()
{
A<int>::B<char> abc;
abc.i = 5;
A<int>::B<int> abi;
abi.j = 5;
}
[\ccode]
Может быть, в твоем случае можно обойтись без вложенного класса. Не очень удобно, но работать должно, о результатах, пожалуйста, сообщи