Hi! Sheplyakov Alexei wrote:
if g++-4.1 -DHAVE_CONFIG_H -I. -I. -I../config -I./../ginac -I../ginac -O2 -g -finline-limit=1000 -pipe -MT exam_structure.o -MD -MP -MF ".deps/exam_structure.Tpo" -c -o exam_structure.o exam_structure.cpp; \ then mv -f ".deps/exam_structure.Tpo" ".deps/exam_structure.Po"; else rm -f ".deps/exam_structure.Tpo"; exit 1; fi exam_structure.cpp:50: error: specialization of ‘void GiNaC::structure<T, ComparisonPolicy>::print(const GiNaC::print_context&, unsigned int) const [with T = sprod_s, ComparisonPolicy = GiNaC::compare_std_less]’ in different namespace exam_structure.cpp:50: error: from definition of ‘void GiNaC::structure<T, ComparisonPolicy>::print(const GiNaC::print_context&, unsigned int) const [with T = sprod_s, ComparisonPolicy = GiNaC::compare_std_less]’ exam_structure.cpp:56: error: specialization of ‘GiNaC::ex GiNaC::structure<T, ComparisonPolicy>::eval(int) const [with T = sprod_s, ComparisonPolicy = GiNaC::compare_std_less]’ in different namespace exam_structure.cpp:56: error: from definition of ‘GiNaC::ex GiNaC::structure<T, ComparisonPolicy>::eval(int) const [with T = sprod_s, ComparisonPolicy = GiNaC::compare_std_less]’
Are you sure this is not the latest GCC whim which will disappear again? (We've seen quite a few of these, lately.) If yes, the specialization of bar::f() below must really be wrapped in namespace A? namespace A { template<class T> class foo { public: void f(); }; } // namespace A namespace B { typedef A::foo<int> bar; template<> void bar::f(); } // namespace B Oouw, sucks... -richy. -- Richard B. Kreckel <http://www.ginac.de/~kreckel/>