
From: "Jeff Garland" <jeff@crystalclearsoftware.com>
I'm starting to think that Pavel is correct about the orthogonal policies.
I agree with that as an ideal, but practicalities often intervene.
Maybe we need this to be something like:
template< typename ConstraintPolicy, typename ErrorPolicy=default_error_policy, typename ImplicitConversionPolicy=allow_implicit_conversion, typename CheckingPolicy=checking_on> class constrained_value {
The downside I see here is that errors get much uglier.
That is a problem, but so too is the increasing pain of specifying a desireable combination of policies. What about using a single policy argument with everything combined? That means you can use a single class (template) or use a class template that permits specifying various pieces -- not unlike shown above -- into one class that can be the constrained_value parameter. The advantage of this approach is that it gives the policy authors greater flexibility. They can write monolithic policy classes, if desireable. They can assemble a class template that gives select configurability or one that makes it possible to supply each policy independently as you've shown. As part of the library, you could even supply the latter class template, so the library would support both extremes out of the box. -- Rob Stewart stewart@sig.com Software Engineer http://www.sig.com Susquehanna International Group, LLP using std::disclaimer;