Я изо всех сил пытаюсь сделать свой класс другом шаблона в его родительском пространстве имен. Может кто-нибудь объяснить, что я делаю неправильно:
Вот мои попытки и их ошибки с MSVC8 (Visual Studio 2005):
namespace a {
namespace b {
template<typename T>
class x;
namespace c {
class y
{
template<typename T>
friend class x;
...
};
}
}}
ошибка C2888: a::b::x: символ не может быть определен в пространстве имен c
namespace a {
namespace b {
template<typename T>
class x;
namespace c {
class y
{
template<typename T>
friend class ::a::b::x;
...
};
}
}}
namespace a {
namespace b {
namespace c {
class y
{
template<typename T>
friend class ::a::b::x;
...
};
}
}}
ошибка C2039: x : не является членом a::b
Я не могу просто включить заголовочный файл, содержащий class x, поскольку он зависит от class y, что приводит к циклическому включению.