feat: support for convertibility of point origins added

This commit is contained in:
Mateusz Pusz
2023-05-24 22:39:42 +02:00
parent 68b32533a8
commit a3e5c84a47
4 changed files with 11 additions and 5 deletions

View File

@@ -37,9 +37,9 @@
namespace geographic {
// clang-format off
inline constexpr struct mean_sea_level : mp_units::absolute_point_origin<mp_units::isq::altitude> {} mean_sea_level;
// clang-format on
inline constexpr struct mean_sea_level : mp_units::absolute_point_origin<mp_units::isq::altitude> {
using mp_units::absolute_point_origin<mp_units::isq::altitude>::absolute_point_origin;
} mean_sea_level;
using msl_altitude = mp_units::quantity_point<mp_units::isq::altitude[mp_units::si::metre], mean_sea_level>;

View File

@@ -38,6 +38,7 @@ enum class earth_gravity_model { egm84_15, egm95_5, egm2008_1 };
template<earth_gravity_model M>
struct height_above_ellipsoid_t : absolute_point_origin<isq::altitude> {
static constexpr earth_gravity_model egm = M;
using absolute_point_origin<isq::altitude>::absolute_point_origin;
};
template<earth_gravity_model M>
inline constexpr height_above_ellipsoid_t<M> height_above_ellipsoid;

View File

@@ -98,7 +98,7 @@ concept QuantityPointOf =
QuantityPoint<QP> &&
(ReferenceOf<std::remove_const_t<decltype(QP::reference)>, 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

View File

@@ -1,4 +1,3 @@
// The MIT License (MIT)
//
// Copyright (c) 2018 Mateusz Pusz
@@ -33,6 +32,12 @@ namespace mp_units {
template<QuantitySpec auto Q>
struct absolute_point_origin {
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 {