.. namespace:: units Concepts ======== .. note:: All names defined in this chapter reside in the :any:`units` namespace unless specified otherwise. .. concept:: template Prefix A concept matching a symbol prefix. Satisfied by all instantiations of :struct:`prefix`. .. concept:: template UnitRatio Satisfied by all ratio values 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:`exponent`. .. concept:: template DerivedDimension A concept matching all derived dimensions in the library. Satisfied by all dimension types derived from the instantiation of ``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 NamedUnit A concept matching all unit types that have an atomic text symbol that can be used to aggregate it with other named units to form a final symbol of a derived unit. .. concept:: template AliasUnit A concept matching all alias unit types in the library. Satisfied by all unit types derived from the instantiation of :class:`alias_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 ``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 QuantityLike A concept matching all quantity-like types other than specialization of :class:`quantity`. Satisfied by all types for which a correct specialization of :class:`quantity_like_traits` type trait is provided. .. concept:: template QuantityPointLike A concept matching all quantity-point-like types other than specialization of :class:`quantity_point`. Satisfied by all types for which a correct specialization of :class:`quantity_point_like_traits` type trait is provided. .. concept:: template WrappedQuantity A concept matching types that wrap quantity objects. Satisfied by all wrapper types that satisfy :expr:`Quantity || QuantityLike` recursively (i.e. ``std::optional>``). .. concept:: template Representation A concept matching types that can be used as a `Quantity` representation type. Satisfied by types that match ``(!Quantity) && (!QuantityLike) && (!WrappedQuantity) && std::regular`` and satisfy one of the following: - if ``common_type_with`` is ``true``, then ``std::common_type_t`` must at least provide binary multiplication and division operators, - otherwise, ``T::value_type`` must be valid, ``common_type_with`` be ``true``, and ``std::common_type_t`` must at least provide binary multiplication and division operators with itself and ``T``. .. concept:: template QuantityPoint A concept matching all quantity points in the library. Satisfied by all instantiations of :class:`quantity_point`. .. concept:: template Kind A concept matching all kind types. Satisfied by all kind types derived from an specialization of :class:`kind`. .. concept:: template PointKind A concept matching all point kind types. Satisfied by all point kind types derived from an specialization of :class:`point_kind`. .. concept:: template QuantityKind A concept matching all quantity kinds in the library. Satisfied by all specializations of :class:`quantity_kind`. .. concept:: template QuantityPointKind A concept matching all quantity point kinds in the library. Satisfied by all specializations of :class:`quantity_point_kind`. .. concept:: template typename DimTemplate> DimensionOfT A concept matching all dimensions being the instantiations derived from the provided dimension class template. .. concept:: template typename DimTemplate> QuantityOfT A concept matching all quantities with a dimension being the instantiation derived from the provided dimension class template. .. concept:: template QuantityOf A concept matching all quantities with a dimension being the instantiation derived from the provided dimension type. .. concept:: template QuantityEquivalentTo A concept matching two equivalent quantities. Satisfied by quantities having equivalent dimensions. .. concept:: template QuantityPointOf A concept matching all quantity points with a dimension being the instantiation derived from the provided dimension type. .. concept:: template QuantityPointEquivalentTo A concept matching two equivalent quantity points. Satisfied by quantity points having equivalent dimensions. .. concept:: template QuantityKindOf A concept matching only quantity kinds of a specific kind. :tparam QK: Quantity kind to verify. :tparam K: Kind type to use for verification. .. concept:: template QuantityKindEquivalentTo A concept matching two equivalent quantity kinds. Satisfied by quantity kinds having equivalent kinds. .. concept:: template QuantityPointKindOf A concept matching only quantity point kinds of a specific point kind. :tparam QPK: Quantity point kind to verify. :tparam PK: Point kind type to use for verification. .. concept:: template QuantityPointKindEquivalentTo A concept matching two equivalent quantity point kinds. Satisfied by quantity point kinds having equivalent kinds.