Boost logo

Boost :

From: David B. Held (dheld_at_[hidden])
Date: 2004-04-02 02:31:32

"Gennadiy Rozental" <gennadiy.rozental_at_[hidden]> wrote in message
> [...]
> Trait is specific to the type
> Policy is orthogonal to the type.
> [...]

Where "the type", I presume, is the [template] class using the
policy | trait? That sounds like a good distinction to me. May I
formalize it by proposing that:

    1. A trait is a metafunction of the client type.

     2. A client type is a metafunction of a policy.

So definition 1 means that a trait is a metafunction which maps a
client type X to a specific trait type trait<X>. Definition 2 means
that a policy client X is a metafunction which maps the client type
to X<policy>. This makes it clear why a policy *class* need not be
a template class. It also shows why a traits *client* need not be a
template class. But I would welcome examples of non-template
traits classes or non-template policy clients.

Now, the definitions I give are necessary but not sufficient
conditions for defining traits and policies. You also need to add
fluff about modifying behavior, yada yada yada.


Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
Version: 6.0.581 / Virus Database: 368 - Release Date: 2/9/2004

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