Concepts ======== .. namespace:: units .. note:: All names defined in this chapter reside in the :any:`units` namespace unless specified otherwise. .. concept:: template PrefixType Satisfied by all types derived from :class:`prefix_type`. .. concept:: template Prefix Satisfied by all instantiations of :class:`prefix`. .. concept:: template Ratio Satisfied by all instantiations of :class:`ratio`. .. concept:: template UnitRatio Satisfied by all types that satisfy :expr:`Ratio` and for which :expr:`R::num > 0` and :expr:`R::den > 0`. .. concept:: template BaseDimension Satisfied by all dimension types derived from instantiation of :class:`base_dimension`. .. concept:: template Exponent Satisfied by all instantiations of :class:`exp`. .. concept:: template DerivedDimension Satisfied by all dimension types derived from instantiation of :class:`detail::derived_dimension_base`. .. concept:: template Dimension Satisfied by all dimension types for which either :expr:`BaseDimension` or :expr:`DerivedDimension` is ``true``. .. concept:: template Unit Satisfied by all unit types derived from instantiation of :class:`scaled_unit`. .. concept:: template UnitOf Satisfied by all unit types that satisfy :expr:`Unit`, :expr:`Dimension`, and for which :expr:`U::reference` and :expr:`dimension_unit::reference` denote the same unit type. .. concept:: template Quantity Satisfied by all instantiations of :class:`quantity`. .. concept:: template WrappedQuantity Satisfied by all wrapper types that satisfy :expr:`Quantity` recursively (i.e. :expr:`std::optional>`). .. concept:: template Scalar Satisfied by types that satisfy :expr:`(!Quantity) && (!WrappedQuantity) && std::regular`.