diff --git a/conanfile.py b/conanfile.py index f54fc631..650bae4c 100644 --- a/conanfile.py +++ b/conanfile.py @@ -45,7 +45,7 @@ class UnitsConan(ConanFile): exports = ["LICENSE.md"] settings = "os", "compiler", "build_type", "arch" requires = ( - "cmcstl2/2019.04.26@mpusz/stable", + "cmcstl2/2019.08.07@mpusz/stable", "gsl-lite/0.33.0@nonstd-lite/stable" ) scm = { diff --git a/doc/DESIGN.md b/doc/DESIGN.md index d9823225..fdd42866 100644 --- a/doc/DESIGN.md +++ b/doc/DESIGN.md @@ -58,7 +58,7 @@ There are C++ concepts provided for each such quantity type: ```cpp template -concept Length = Quantity && std::Same; +concept Length = Quantity && std::same_as; ``` With that we can easily write a function template like this: @@ -139,7 +139,7 @@ However, such an approach have some challenges: constexpr Velocity auto v1 = 1_m / 1s; constexpr Velocity auto v2 = 2 / 2s * 1m; -static_assert(std::Same); +static_assert(std::same_as); static_assert(v1 == v2); ``` @@ -258,12 +258,12 @@ public: [[nodiscard]] static constexpr quantity one() noexcept { return quantity(quantity_values::one()); } template - requires std::Same> + requires std::same_as> [[nodiscard]] constexpr Scalar operator*(const quantity& lhs, const quantity& rhs); template - requires (!std::Same>) && + requires (!std::same_as>) && (treat_as_floating_point || (std::ratio_multiply::den == 1)) [[nodiscard]] constexpr Quantity operator*(const quantity& lhs, @@ -274,12 +274,12 @@ public: const quantity& q); template - requires std::Same + requires std::same_as [[nodiscard]] constexpr Scalar operator/(const quantity& lhs, const quantity& rhs); template - requires (!std::Same) && + requires (!std::same_as) && (treat_as_floating_point || (ratio_divide::den == 1)) [[nodiscard]] constexpr Quantity operator/(const quantity& lhs, @@ -323,15 +323,15 @@ could generate a following compile time error: ^~~~ In file included from \example\example.cpp:23: /src/include/units/si/velocity.h:41:16: note: within 'template concept const bool stde::units::Velocity [with T = stde::units::quantity >, std::ratio<1> >, long long int>]' - concept Velocity = Quantity && std::Same; + concept Velocity = Quantity && std::same_as; ^~~~~~~~ In file included from /src/include/units/bits/tools.h:25, from /src/include/units/dimension.h:25, from /src/include/units/si/base_dimensions.h:25, from /src/include/units/si/velocity.h:25, from \example\example.cpp:23: -/src/include/units/bits/stdconcepts.h:33:18: note: within 'template concept const bool std::Same [with T = stde::units::dimension >; U = stde::units::dimension,stde::units::exp >]' - concept Same = std::is_same_v; +/src/include/units/bits/stdconcepts.h:33:18: note: within 'template concept const bool std::same_as [with T = stde::units::dimension >; U = stde::units::dimension,stde::units::exp >]' + concept same_as = std::is_same_v; ^~~~ /src/include/units/bits/stdconcepts.h:33:18: note: 'std::is_same_v' evaluated to false ``` @@ -360,15 +360,15 @@ same code will result with such an error: ^~~~ In file included from \example\example.cpp:23: /src/include/units/si/velocity.h:48:16: note: within 'template concept const bool stde::units::Velocity [with T = stde::units::quantity]' - concept Velocity = Quantity && std::Same; + concept Velocity = Quantity && std::same_as; ^~~~~~~~ In file included from /src/include/units/bits/tools.h:25, from /src/include/units/dimension.h:25, from /src/include/units/si/base_dimensions.h:25, from /src/include/units/si/velocity.h:25, from \example\example.cpp:23: -/src/include/units/bits/stdconcepts.h:33:18: note: within 'template concept const bool std::Same [with T = stde::units::time; U = stde::units::velocity]' - concept Same = std::is_same_v; +/src/include/units/bits/stdconcepts.h:33:18: note: within 'template concept const bool std::same_as [with T = stde::units::time; U = stde::units::velocity]' + concept same_as = std::is_same_v; ^~~~ /src/include/units/bits/stdconcepts.h:33:18: note: 'std::is_same_v' evaluated to false ``` @@ -401,7 +401,7 @@ concept bool Downcastable = requires { typename T::base_type; } && - std::DerivedFrom>; + std::derived_from>; template using downcast_from = T::base_type; @@ -444,7 +444,7 @@ template<> struct downcasting_traits> : downcast_to -concept Velocity = Quantity && std::Same; +concept Velocity = Quantity && std::same_as; ``` 3. Define units and provide downcasting traits for them: diff --git a/src/include/units/bits/concepts.h b/src/include/units/bits/concepts.h index b018eec7..c8b4d0ef 100644 --- a/src/include/units/bits/concepts.h +++ b/src/include/units/bits/concepts.h @@ -27,8 +27,8 @@ namespace std::experimental::units { template - concept bool Number = std::Regular && - std::StrictTotallyOrdered && + concept bool Number = std::regular && + std::totally_ordered && requires(T a, T b) { { a + b } -> T; { a - b } -> T; @@ -41,6 +41,6 @@ namespace std::experimental::units { { a /= b } -> T&; { T{0} };// can construct a T from a zero // … - } ; + }; } // namespace std::experimental::units diff --git a/src/include/units/bits/downcasting.h b/src/include/units/bits/downcasting.h index 958efbfc..c80881a2 100644 --- a/src/include/units/bits/downcasting.h +++ b/src/include/units/bits/downcasting.h @@ -37,7 +37,7 @@ namespace std::experimental::units { requires { typename T::base_type; } && - std::DerivedFrom>; + std::derived_from>; template using downcast_from = T::base_type; diff --git a/src/include/units/bits/hacks.h b/src/include/units/bits/hacks.h index 88fdc49b..bf5cb104 100644 --- a/src/include/units/bits/hacks.h +++ b/src/include/units/bits/hacks.h @@ -39,11 +39,10 @@ namespace std { #endif // UNITS_HAS_STD_TYPE_IDENTITY // concepts - using experimental::ranges::Same; - using experimental::ranges::Integral; - using experimental::ranges::DerivedFrom; - using experimental::ranges::Regular; - using experimental::ranges::StrictTotallyOrdered; - using experimental::ranges::ConvertibleTo; + using experimental::ranges::same_as; + using experimental::ranges::derived_from; + using experimental::ranges::regular; + using experimental::ranges::totally_ordered; + using experimental::ranges::convertible_to; } diff --git a/src/include/units/dimensions/acceleration.h b/src/include/units/dimensions/acceleration.h index ec1ddbb0..c14ebd2b 100644 --- a/src/include/units/dimensions/acceleration.h +++ b/src/include/units/dimensions/acceleration.h @@ -30,7 +30,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Acceleration = Quantity && std::Same; + concept bool Acceleration = Quantity && std::same_as; struct metre_per_second_sq : derived_unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/area.h b/src/include/units/dimensions/area.h index 9a565f58..03f8a84b 100644 --- a/src/include/units/dimensions/area.h +++ b/src/include/units/dimensions/area.h @@ -30,7 +30,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Area = Quantity && std::Same; + concept bool Area = Quantity && std::same_as; struct square_millimetre : derived_unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/capacitance.h b/src/include/units/dimensions/capacitance.h index 88de5bcb..51b7a457 100644 --- a/src/include/units/dimensions/capacitance.h +++ b/src/include/units/dimensions/capacitance.h @@ -32,7 +32,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Capacitance = Quantity && std::Same; + concept bool Capacitance = Quantity && std::same_as; struct farad : derived_unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/current.h b/src/include/units/dimensions/current.h index d7febc40..101e678a 100644 --- a/src/include/units/dimensions/current.h +++ b/src/include/units/dimensions/current.h @@ -31,7 +31,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Current = Quantity && std::Same; + concept bool Current = Quantity && std::same_as; struct ampere : unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/electric_charge.h b/src/include/units/dimensions/electric_charge.h index 9ab449c5..eb0ac89a 100644 --- a/src/include/units/dimensions/electric_charge.h +++ b/src/include/units/dimensions/electric_charge.h @@ -32,7 +32,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool ElectricCharge = Quantity && std::Same; + concept bool ElectricCharge = Quantity && std::same_as; struct coulomb : derived_unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/energy.h b/src/include/units/dimensions/energy.h index 124d647f..be491c5c 100644 --- a/src/include/units/dimensions/energy.h +++ b/src/include/units/dimensions/energy.h @@ -32,7 +32,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Energy = Quantity && std::Same; + concept bool Energy = Quantity && std::same_as; struct joule : derived_unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/force.h b/src/include/units/dimensions/force.h index 0f351952..e431ef94 100644 --- a/src/include/units/dimensions/force.h +++ b/src/include/units/dimensions/force.h @@ -33,7 +33,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Force = Quantity && std::Same; + concept bool Force = Quantity && std::same_as; struct newton : derived_unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/frequency.h b/src/include/units/dimensions/frequency.h index af33d5ae..bca18c2a 100644 --- a/src/include/units/dimensions/frequency.h +++ b/src/include/units/dimensions/frequency.h @@ -31,7 +31,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Frequency = Quantity && std::Same; + concept bool Frequency = Quantity && std::same_as; struct hertz : derived_unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/length.h b/src/include/units/dimensions/length.h index e3fca7b7..d9d8dff8 100644 --- a/src/include/units/dimensions/length.h +++ b/src/include/units/dimensions/length.h @@ -31,7 +31,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Length = Quantity && std::Same; + concept bool Length = Quantity && std::same_as; // SI units struct metre : unit {}; diff --git a/src/include/units/dimensions/luminous_intensity.h b/src/include/units/dimensions/luminous_intensity.h index 927f3077..2cf74bfb 100644 --- a/src/include/units/dimensions/luminous_intensity.h +++ b/src/include/units/dimensions/luminous_intensity.h @@ -31,7 +31,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool LuminousIntensity = Quantity && std::Same; + concept bool LuminousIntensity = Quantity && std::same_as; struct candela : unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/mass.h b/src/include/units/dimensions/mass.h index 2e1b1d36..bd9e8690 100644 --- a/src/include/units/dimensions/mass.h +++ b/src/include/units/dimensions/mass.h @@ -31,7 +31,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Mass = Quantity && std::Same; + concept bool Mass = Quantity && std::same_as; struct gram : unit> {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/power.h b/src/include/units/dimensions/power.h index 06ba610d..0423e17d 100644 --- a/src/include/units/dimensions/power.h +++ b/src/include/units/dimensions/power.h @@ -31,7 +31,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Power = Quantity && std::Same; + concept bool Power = Quantity && std::same_as; struct watt : derived_unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/pressure.h b/src/include/units/dimensions/pressure.h index e390b95f..70dcb0e6 100644 --- a/src/include/units/dimensions/pressure.h +++ b/src/include/units/dimensions/pressure.h @@ -31,7 +31,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Pressure = Quantity && std::Same; + concept bool Pressure = Quantity && std::same_as; struct pascal : derived_unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/substance.h b/src/include/units/dimensions/substance.h index 2f522aae..203885cd 100644 --- a/src/include/units/dimensions/substance.h +++ b/src/include/units/dimensions/substance.h @@ -31,7 +31,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool Substance = Quantity && std::Same; + concept bool Substance = Quantity && std::same_as; struct mole : unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/temperature.h b/src/include/units/dimensions/temperature.h index de1540ae..544eba4c 100644 --- a/src/include/units/dimensions/temperature.h +++ b/src/include/units/dimensions/temperature.h @@ -31,7 +31,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to {}; template - concept bool ThermodynamicTemperature = Quantity && std::Same; + concept bool ThermodynamicTemperature = Quantity && std::same_as; struct kelvin : unit {}; template<> struct downcasting_traits> : downcast_to {}; diff --git a/src/include/units/dimensions/time.h b/src/include/units/dimensions/time.h index 4554a50c..d2ace8c4 100644 --- a/src/include/units/dimensions/time.h +++ b/src/include/units/dimensions/time.h @@ -31,7 +31,7 @@ namespace std::experimental::units { template<> struct downcasting_traits> : downcast_to