Привет всем!
Возник вот вопрос:
template <
class Owner
> class A
{
public:
friend class Owner; /* как вот в этом месте заставить компилятор поверить, что Owner действительно друг? */
private:
void test() { std::cout << "A::test\n"; }
};
class B
{
public:
A<B> a;
void test()
{
a.test();
}
};
int main(int, char**)
{
B b;
b.test();
return 0;
}
Здравствуйте, Аноним, Вы писали:
А> friend class Owner; /* как вот в этом месте заставить компилятор поверить, что Owner действительно друг? */
friend typename Owner;
Здравствуйте, _NaN_, Вы писали:
_NN>Здравствуйте, Аноним, Вы писали:
А>> friend class Owner; /* как вот в этом месте заставить компилятор поверить, что Owner действительно друг? */
_NN>_NN>friend typename Owner;
_NN>
Неа

Вот так ругается компилятор:
2.cpp:10: error: expected nested-name-specifier before "Owner"
2.cpp:10: error: ISO C++ forbids declaration of `Owner' with no type
2.cpp:10: error: `Owner' is neither function nor member function; cannot be declared friend
2.cpp: In member function `void B::test()':
2.cpp:12: error: `void A<Owner>::test() [with Owner = B]' is private
2.cpp:21: error: within this context
П.С.
MingW — 3.4.5
Здравствуйте, Аноним, Вы писали:
А>Возник вот вопрос:
А>...
Точно такой же
здесьАвтор: GGoga
Дата: 15.08.08
вопрос я задавал чуть менее недели назад

Ответ: напрямую так делать нельзя! Стандарт запрещает.
Здравствуйте, GGoga, Вы писали:
GG>Здравствуйте, Аноним, Вы писали:
А>>Возник вот вопрос:
А>>...
GG>Точно такой же здесьАвтор: GGoga
Дата: 15.08.08
вопрос я задавал чуть менее недели назад
GG>Ответ: напрямую так делать нельзя! Стандарт запрещает.
Гы

Как все-таки тесен мир. Ладно будем думать