Concepts ======== .. namespace:: units .. note:: All names defined in this chapter reside in the :any:`units` namespace unless specified otherwise. .. concept:: template PrefixFamily A concept matching a prefix family. Satisfied by all types derived from :class:`prefix_family`. .. concept:: template Prefix A concept matching a symbol prefix. Satisfied by all instantiations of :class:`prefix`. .. concept:: template Ratio A concept matching a ratio. Satisfied by all instantiations of :class:`ratio`. .. concept:: template UnitRatio A concept matching unit's ratio. Satisfied by all types that satisfy :expr:`Ratio` and for which :expr:`R::num > 0` and :expr:`R::den > 0`. .. concept:: template BaseDimension A concept matching all base dimensions in the library. Satisfied by all dimension types derived from the instantiation of :class:`base_dimension`. .. concept:: template Exponent A concept matching dimension's exponents. Satisfied by all instantiations of :class:`exp`. .. concept:: template DerivedDimension A concept matching all derived dimensions in the library. Satisfied by all dimension types derived from the instantiation of :class:`detail::derived_dimension_base`. .. concept:: template Dimension A concept matching all dimensions in the library. Satisfied by all dimension types for which either :expr:`BaseDimension` or :expr:`DerivedDimension` is ``true``. .. concept:: template Unit A concept matching all unit types in the library. Satisfied by all unit types derived from the instantiation of :class:`scaled_unit`. .. concept:: template UnitOf A concept matching only units of a specified dimension. 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. :tparam U: Type to verify against concept constraints. :tparam D: Dimension type to use for verification. .. concept:: template Quantity A concept matching all quantities in the library. Satisfied by all instantiations of :class:`quantity`. .. concept:: template WrappedQuantity A concept matching types that wrap quantity objects. Satisfied by all wrapper types that satisfy :expr:`Quantity` recursively (i.e. :expr:`std::optional>`). .. concept:: template Scalar A concept matching non-Quantity types. Satisfied by types that satisfy :expr:`(!Quantity) && (!WrappedQuantity) && std::regular`.