Hi all. I have the following problem: namespace test { class A { template <typename T> void foo(T &); }; } //specialize the function out of namespace test template <> test::A::foo<int>(int & a) { //do something with a } if on the contrary I put it this way: namespace test { class A { template <typename T> void foo(T &); }; //specialize the function inside namespace test template <> A::foo<int> (int & a) { //do something with a } } it works ok. How can I use the first form without errors? Thanks in advance.