mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-04 20:54:28 +02:00
feat: support for convertibility of point origins added
This commit is contained in:
@@ -37,9 +37,9 @@
|
|||||||
|
|
||||||
namespace geographic {
|
namespace geographic {
|
||||||
|
|
||||||
// clang-format off
|
inline constexpr struct mean_sea_level : mp_units::absolute_point_origin<mp_units::isq::altitude> {
|
||||||
inline constexpr struct mean_sea_level : mp_units::absolute_point_origin<mp_units::isq::altitude> {} mean_sea_level;
|
using mp_units::absolute_point_origin<mp_units::isq::altitude>::absolute_point_origin;
|
||||||
// clang-format on
|
} mean_sea_level;
|
||||||
|
|
||||||
using msl_altitude = mp_units::quantity_point<mp_units::isq::altitude[mp_units::si::metre], mean_sea_level>;
|
using msl_altitude = mp_units::quantity_point<mp_units::isq::altitude[mp_units::si::metre], mean_sea_level>;
|
||||||
|
|
||||||
|
@@ -38,6 +38,7 @@ enum class earth_gravity_model { egm84_15, egm95_5, egm2008_1 };
|
|||||||
template<earth_gravity_model M>
|
template<earth_gravity_model M>
|
||||||
struct height_above_ellipsoid_t : absolute_point_origin<isq::altitude> {
|
struct height_above_ellipsoid_t : absolute_point_origin<isq::altitude> {
|
||||||
static constexpr earth_gravity_model egm = M;
|
static constexpr earth_gravity_model egm = M;
|
||||||
|
using absolute_point_origin<isq::altitude>::absolute_point_origin;
|
||||||
};
|
};
|
||||||
template<earth_gravity_model M>
|
template<earth_gravity_model M>
|
||||||
inline constexpr height_above_ellipsoid_t<M> height_above_ellipsoid;
|
inline constexpr height_above_ellipsoid_t<M> height_above_ellipsoid;
|
||||||
|
@@ -98,7 +98,7 @@ concept QuantityPointOf =
|
|||||||
QuantityPoint<QP> &&
|
QuantityPoint<QP> &&
|
||||||
(ReferenceOf<std::remove_const_t<decltype(QP::reference)>, V> ||
|
(ReferenceOf<std::remove_const_t<decltype(QP::reference)>, V> ||
|
||||||
(PointOrigin<std::remove_const_t<decltype(V)>> &&
|
(PointOrigin<std::remove_const_t<decltype(V)>> &&
|
||||||
std::same_as<std::remove_const_t<decltype(QP::absolute_point_origin)>, std::remove_const_t<decltype(V)>>));
|
std::convertible_to<std::remove_const_t<decltype(QP::absolute_point_origin)>, std::remove_const_t<decltype(V)>>));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A concept matching all external quantity point like types
|
* @brief A concept matching all external quantity point like types
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
// The MIT License (MIT)
|
// The MIT License (MIT)
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Mateusz Pusz
|
// Copyright (c) 2018 Mateusz Pusz
|
||||||
@@ -33,6 +32,12 @@ namespace mp_units {
|
|||||||
template<QuantitySpec auto Q>
|
template<QuantitySpec auto Q>
|
||||||
struct absolute_point_origin {
|
struct absolute_point_origin {
|
||||||
static constexpr QuantitySpec auto quantity_spec = Q;
|
static constexpr QuantitySpec auto quantity_spec = Q;
|
||||||
|
absolute_point_origin() = default;
|
||||||
|
template<QuantitySpec auto Q2>
|
||||||
|
requires(implicitly_convertible(Q2, Q))
|
||||||
|
consteval absolute_point_origin(absolute_point_origin<Q2>)
|
||||||
|
{
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
|
Reference in New Issue
Block a user