Вот такой код компилирую в MSVC++7.1
namespace Decl
{
template <class T> void Foo1(T);
template <class T> void Foo2(T);
};
class CFoo
{
int dummy;
template <class T>
friend void Decl::Foo1<T>(T);
template <class T>
friend void Decl::Foo2<T>(T);
};
Выдает ошибку компиляции: error C2951: template declarations are only permitted at global or namespace scope
Если поменяю местами строчки и получу:
namespace Decl
{
template <class T> void Foo1(T);
template <class T> void Foo2(T);
};
class CFoo
{
template <class T>
friend void Decl::Foo1<T>(T);
int dummy;
template <class T>
friend void Decl::Foo2<T>(T);
};
то все нормально. Это меня глючит или это ошибка компилятора???
Исправлено форматирование. Пожалуйста, пользуйтесь тегами [c] ... [/c], [code] ... [/code] и т.п. для выделения фрагментов кода. -- ПК.
VNG>class CFoo
VNG>{
VNG> int dummy;
VNG> template <class T>
VNG> friend void Decl::Foo1(T);
VNG> template <class T>
VNG> friend void Decl::Foo2(T);
VNG>};
А если так?
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>VNG>>class CFoo
VNG>>{
VNG>> int dummy;
VNG>> template <class T>
VNG>> friend void Decl::Foo1(T);
VNG>> template <class T>
VNG>> friend void Decl::Foo2(T);
VNG>>};
L_L>
L_L>А если так?
Все равно ошибка. Компилируется только тогда, когда int dummy; стоит между двумя объявлениями friend функций.
А в принципе вместо template <class T> friend void Decl::Foo1<T>(T);
можно написать и template <class T> friend void Decl::Foo1(T);
но мне кажется, что первый вариант более корректен. Или я не прав?