# Policies

The `interval` template requires two arguments. The first corresponds to the base type chosen for the bounds. And the second defines the rounding and checking behaviors of the newly constructed class. This second argument is not mandatory but may need some customizations. In order to ease the manipulations, some helper templates are provided in `interval/policies.hpp`.

    namespace boost {
    namespace numeric {
    namespace interval_lib {

    template<class Rounding, class Checking>
    struct policies {
      typedef Rounding rounding;
      typedef Checking checking;
    };

    template<class OldInterval, class NewRounding>
    struct change_rounding {
      typedef ... type;
    };

    template<class OldInterval, class NewChecking>
    struct change_checking {
      typedef ... type;
    };

    template<class OldInterval>
    struct unprotect {
      typedef ... type;
    };

    } // namespace interval_lib
    } // namespace numeric
    } // namespace boost

The `policies` template should be used whenever the user needs to define a policy structure for an `interval` class. `change_rounding` and `change_checking` can be used to get the type of a new interval by changing one of the policies of an old interval; the new type is available thanks to the type definition `type`. Finally, `unprotect` looks like `change_rounding` and directly changes the rounding of an interval to its unprotected version (a better explanation is available here).

Revised: 2003-01-21
Copyright (c) Guillaume Melquiond, Sylvain Pion, Hervé Brönnimann, 2002.
Polytechnic University.