[#mp_units-vector_axes]
= xref:mp_units.adoc[mp&lowbar;units]::vector&lowbar;axes
:relfileprefix: ../
:mrdocs:

Ordered list of the 1D&hyphen;vector component axes a vector quantity decomposes into

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;vector&lowbar;components&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;xref:mp_units/QuantitySpec.adoc[QuantitySpec] auto Axes&period;&period;&period;&gt;
requires detail&colon;&colon;ValidVectorAxes&lt;Axes&period;&period;&period;&gt;
struct vector&lowbar;axes;
----

== Description

A user opts a vector whole into decomposition by specializing `vector&lowbar;components` (the customization point in `customization&lowbar;points&period;h`) and inheriting from this template, listing the per&hyphen;axis quantity specs in coordinate order&colon;

[,cpp]
----
template<>
struct mp_units::vector_components<flight_velocity> :
    mp_units::vector_axes<forward_velocity, wind_drift, sink_rate> {};
----
The axis&hyphen;intrinsic preconditions are enforced here&colon; every axis must be a vector quantity, the axes must share a common hierarchy root (be the same kind of quantity), and they must be pairwise&hyphen;distinct kinds (declare each with `is&lowbar;kind`)&period; A specialization that violates them is ill&hyphen;formed at the point of definition&period; The relational preconditions (axes share the whole&apos;s hierarchy root, differ from the whole&apos;s kind, and fit the representation) need the whole and the representation, so they are enforced by the `Decomposable` concept&period;

== Static Data Members

[cols="1"]
|===
| Name
| xref:mp_units/vector_axes/axis.adoc[`axis`] 
| xref:mp_units/vector_axes/size.adoc[`size`] 
|===



[.small]#Created with https://www.mrdocs.com[MrDocs]#
