feat: explicit constructor now can perform an explicit quantity_spec conversion

This commit is contained in:
Mateusz Pusz
2025-06-20 17:10:34 +02:00
parent 723e3dfa68
commit 9c140f4b3a
4 changed files with 18 additions and 13 deletions

View File

@ -705,8 +705,8 @@ static_assert(
!std::convertible_to<quantity_point<si::kelvin, si::ice_point>, quantity_point<isq::height[m], mean_sea_level>>);
// non-convertible quantity_specs
static_assert(!std::constructible_from<quantity_point<special_height[m], mean_sea_level>,
quantity_point<isq::height[m], mean_sea_level>>);
static_assert(std::constructible_from<quantity_point<special_height[m], mean_sea_level>,
quantity_point<isq::height[m], mean_sea_level>>);
static_assert(!std::convertible_to<quantity_point<isq::height[m], mean_sea_level>,
quantity_point<special_height[m], mean_sea_level>>);
@ -766,8 +766,8 @@ static_assert(std::constructible_from<quantity_point<isq::height[m], mean_sea_le
static_assert(std::convertible_to<quantity_point<special_height[m], mean_sea_level>,
quantity_point<isq::height[m], mean_sea_level>>);
static_assert(!std::constructible_from<quantity_point<special_height[m], mean_sea_level>,
quantity_point<isq::height[m], mean_sea_level>>);
static_assert(std::constructible_from<quantity_point<special_height[m], mean_sea_level>,
quantity_point<isq::height[m], mean_sea_level>>);
static_assert(!std::convertible_to<quantity_point<isq::height[m], mean_sea_level>,
quantity_point<special_height[m], mean_sea_level>>);

View File

@ -224,6 +224,7 @@ static_assert(std::convertible_to<quantity<si::metre, cartesian_vector<double>>,
quantity<isq::position_vector[m], cartesian_vector<double>>>);
#endif
// conversion between different quantities not allowed
static_assert(!std::constructible_from<quantity<isq::length[m]>, quantity<isq::time[s]>>);
static_assert(!std::convertible_to<quantity<isq::time[s]>, quantity<isq::length[m]>>);
@ -263,6 +264,11 @@ static_assert(!std::convertible_to<quantity<rad>, quantity<one>>);
static_assert(!std::convertible_to<quantity<isq::angular_measure[one]>, quantity<dimensionless[one]>>);
static_assert(!std::convertible_to<quantity<isq::angular_measure[one]>, quantity<one>>);
// explicit-construction only
static_assert(std::constructible_from<quantity<isq::distance[m]>, quantity<isq::length[m]>>);
static_assert(!std::convertible_to<quantity<isq::length[m]>, quantity<isq::distance[m]>>);
///////////////////////
// obtaining a number
///////////////////////