// Build don't link: template class Point { public: Point (Point &); Point & operator = (Point &); }; template class bar{ public: void foo (Point p = Point()); }; template <> void bar<2>::foo (Point<2> p) { const int dim = 2; Point q = p; };