Здравствуйте, ssm, Вы писали:
ssm>[ccode] ssm>template<typename T1> ssm>struct test{ ssm> template<typename T, typename U> struct A{}; ssm> template<typename T, typename U> ssm> struct B : public A<T, U>{ ssm> typedef A<T, U> _Base; ssm> }; ssm>}; ssm>который gcc2.95 отказался компилить, говорит мол A — нешаблон. Comeau проглатывает на ура... ssm>А посему возникает вопрос о корректности кода в первом примере.
в Visual C++ 6 проходит нормально ...
Правило наименьшего удивления: Программа должна работать так, чтобы это вызывало наименьшее удивление у пользователя.
Построй свой мини-горд на http://rumactep.myminicity.com/
Здравствуйте, ssm, Вы писали:
ssm>Здравствуйте, MACTEP, Вы писали:
ssm> MAC>>в Visual C++ 6 проходит нормально ...
ssm>А правомерно ли это с точки зрения стандарта? А то я чевойт ненашел
Intel и VC++ 7 хавают.
Единственная мысль, что gcc не нравится, что _Base начинается с подчеркивания...
Здравствуйте, ssm, Вы писали:
ssm>который gcc2.95 отказался компилить, говорит мол A — нешаблон. Comeau проглатывает на ура... ssm>удалось только так забороть:
ssm>
ssm> template<typename T, typename U>
ssm> struct B : public A<T, U>{
ssm> typedeftest<T1>::A<T, U> _Base;
ssm> };
ssm>
ssm>А посему возникает вопрос о корректности кода в первом примере.
Не разбираясь, сходу предполагаю, что, возможно, здесь нужно использовать template как квалификатор, то есть написать так:
Здравствуйте, Denn, Вы писали:
D> Не разбираясь, сходу предполагаю, что, возможно, здесь нужно использовать template как квалификатор, то есть написать так:
D>
D>typedef template A<T, U> _Base;
D>
Нууу!!! Этого даже Comeau непонимает...
D> Посмотри, например, Страуструпа B.13.6
L_L>Это — приложение — смотри в конце книги.
Да я понял, что приложение , но в приложении B у меня последняя глава №5 "Exercices"
L_L>Но, ответ Denn — неправильный.
Да мне уже Comeau по этому поводу нажаловался