Boost logo

Boost :

From: David Abrahams (david.abrahams_at_[hidden])
Date: 2002-01-25 17:27:56

FWIW, here are the technical/historical reasons that we can't declare a
template parameter to be a friend.


----- Original Message -----
From: "John H. Spicer" <jhs_at_[hidden]>

> David Abrahams wrote:
> >
> > Hi John,
> >
> > Can you provide rationale on this for us?
> >
> > The question, in a nutshell, is "why can't I declare a class template's
> > parameter to be a
> > friend of that class template ('s instantiation)"?
> The basic issue is whether a template parameter can be used in an
> type specifier (a friend class declaration is just a kind of elaborated
> type specifier).
> The committee had two choices:
> - permit elaborated type specifiers that refer to template parameters and
> update the rules to specify what happens when a template parameter has
> a conflicting type
> - disallow such use, as is the case with typedefs
> Template parameters generally behave a lot like typedefs so this seemed
> a good way to go. When this was discussed, no one suggested any reasons
> it would be useful to allow such friend declarations, so we went with the
> prohibition.
> If you permit elaborated type specifiers that use template parameters, you
> then have to describe cases like:
> template <class T> void f(struct T);
> template <class T> void f(enum T);
> In other words, can you overload on the kind of elaborated type specifier
> tag?
> John.

Boost list run by bdawes at, gregod at, cpdaniel at, john at