
From: David Abrahams <dave@boost-consulting.com>
Rob Stewart <stewart@sig.com> writes:
From: David Abrahams <dave@boost-consulting.com>
Technically one can never say "class template foo is a traits template" or "class template foo is a policy" without examining how it's used. There's no fundamental reason that the same class template can't be used in both ways, so for any given class template, there may be no either/or answer.
I don't quite agree. A policy class is only that because it is a template parameter.
A class is never a template parameter. It can be a template argument.
Those two are often used interchangeably. The standard always, may use "parameter" and "argument" in those senses, but they aren't defined and common usage gets in the way. Anyway, I meant "parameter" according to that dichotomy.
Whether a class that is passed as a policy to some template happens to be a traits class is immaterial. So, in the context of the template, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exactly. How it's used.
A traits class can be used as a policy. We're agreed. However, that traits class is not a policy class. A class (template) can be created to be a policy or it can be created to be a traits class. In the former case, it is created specifically to meet a need for a policy; there is no intention that code would ever be written using its name directly. That is, it is only ever passed as a template _argument_. By contrast, a traits class is not created to be used as a policy. If a template comes along that decides the traits class' interface is appropriate to be its policy, then the traits class can be used as that templates policy. That doesn't make the traits class a policy class, IMO. Its use within the template is as a policy.
the template parameter is a policy class and that may correspond to a traits class in a particular specialization, but that doesn't make the traits class a policy class. Does that make sense?
Not much, to me. I think you're trying to say the same thing I said, but in a more contorted way.
Therein lies the rub. You _think_ we're saying the same, but neither of us is entirely sure yet. BTW, once there's agreement, we need to try our hand at definitions. -- Rob Stewart stewart@sig.com Software Engineer http://www.sig.com Susquehanna International Group, LLP using std::disclaimer;