template<typename T>
concept Dimension = SymbolicConstant<T> && std::derived_from<T, dimension-interface>;
template<typename T>
concept BaseDimension = // exposition only
Dimension<T> && (is-derived-from-specialization-of<T, base_dimension>());
template<typename T, auto D>
concept DimensionOf = Dimension<T> && Dimension<decltype(D)> && (T{} == D);