// { dg-do compile } // Templates defined outside must be declared inside namespace bar { // trick it to provide some prior declaration template<class T> void foo(); // { dg-error "definition" } template<class T>class X; // { dg-error "previous declaration" } } template <typename T> T const bar::foo(T const &a) // { dg-error "" "" { xfail *-*-* } } not declared in bar - { return a; } template<> void bar::foo<int>() // { dg-error "different namespace" } { } template<class T,class U> class bar::X{}; // { dg-error "1 template parameter" }