Topic: No friendship for private constructors?
Author: perry@key.COM (Perry The Cynic)
Date: 16 Feb 91 07:13:58 GMT Raw View
Consider the following program:
class One {
friend class Two;
private:
One();
};
class Two {
static One test;
}
One Two::test;
The last line draws an error from both cfront and Turbo C++:
error: ..() cannot access One::One(): private member
Why the complaint? My interpretation of the scoping rules says that
the Two:: qualifier puts me into Two's scope. Since Two is a friend
of One, I don't see why it can't access One's private constructor.
Incidentally, the error remains even if I rewrite the last line as
One Two::test = One();
and the ARM says explicitly that the initializing expression is
interpreted in the context of Two.
What am I misunderstanding here? Can somebody quote the language rule
that I'm missing? Or are both compilers violating the language standard?
Oh, and how do I write this legally? The intent is to make it impossible
to create objects of type One, except inside Two (which then hands out
references to One objects).
Thanks
-- perry
--
--------------------------------------------------------------------------
Perry The Cynic (Peter Kiehtreiber) perry@arkon.key.com
** What good signature isn't taken yet? ** {amdahl,sgi,pacbell}!key!perry