Mam kilka spraw odnosnie deklaracji przyjaźni w klasach. Uczę się z książki “Symfonia C++ standard”.
Pierwsza rzecz to taki kod podany przez autora:
class druga; //<--- deklaracja zapowiadająca
class pierwsza{
friend class druga;
};
class druga{
friend class pierwsza;
};
Pierwsza linijka - sprawdzilem - jest zbędna prawda ? Bo dekl. zapowiadająca jest jednocześnie w deklaracji przyjaźni jakby w liniii 3. Druga sprawa to deklaracja przyjaźni z jakąś funkcją składową. Jeżeli np. klasa X definiuje przyjaźń z funkcją PRZ::fun to klasa PRZ musi być już wcześniej zdefiniowana. Grębosz wspomniał, że tak jest zeby np. sprawdzic czy taka funkcja rzeczywiście tam jest. Są jeszcze inne argumenty ? Trzecia sprawa łączy się z powyższą. Jeżeli mamy taką sytuację jak wyżej to funkcja PRZ::fun musi być zdefiniowana na zewnątrz klasy PRZ, po definicji klasy X, prawda ? Bo skoro w swoim ciele korzysta ze skladnikow tej klasy X, to X musi być już zdefiniowana, tak ? Czwarta sprawa dotyczy specyfikatora ‘static’. W Symfonii jest napisane:
Czyli aby funkcja posiadała łączenie wewnętrzne i była przyjacielem klasy to powinna znaleźć się nad definicją danej klasy:
static void fun(int, int)
{ }
class A
{
friend void fun(int, int);
};
Zgadza się ?
Piąta i ostatnia sprawa dot. tego fragmentu z ksiązki:
Pomijając fakt, ze autor się pomylił tutaj, bo nigdy nie ma takich przydomków przed funkcją jak mutable, register i auto - to dlaczego static i extern są zabronione ?
Dzięki za pomoc 


2) Skoro już jesteśmy przy temacie to ten qualified-id to jest po prostu nazwa poprzedzona pustym operatorem zakresu :?: Ja slyszalem ze tego operatora uzywa sie jak chcemy odniesc sie do zaslonietej nazwy globalnej - a w Twoim przykładzie, nic takiego nie bylo więc po co on
? 3) Nie wiem czemu też wystąpi błąd z tym operatorem ::. W drugim przykladzie jest tak jak mowiles - g++ zrobił błąd. Na