| // { dg-do compile } |
| // Templates defined outside must be declared inside |
| namespace bar |
| { |
| // trick it to provide some prior declaration |
| template<class T> |
| void foo(); |
| template<class T>class X; // { dg-message "note: 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" "" { target c++98_only } } |
| { |
| } |
| |
| template<class T,class U> |
| class bar::X{}; // { dg-error "redeclared with 2 template parameter" } |