diff --git a/doc/DESIGN.md b/doc/DESIGN.md index 384e92bb..a448a7db 100644 --- a/doc/DESIGN.md +++ b/doc/DESIGN.md @@ -392,11 +392,17 @@ a `quantity` type or only its template parameters (`Unit`, `Rep`): ```cpp template - requires std::same_as -constexpr To quantity_cast(const quantity& q); + requires same_dim +[[nodiscard]] constexpr To quantity_cast(const quantity& q); -template -constexpr quantity quantity_cast(const quantity& q); +template +[[nodiscard]] constexpr quantity quantity_cast(const quantity& q); + +template +[[nodiscard]] constexpr quantity quantity_cast(const quantity& q); + +template +[[nodiscard]] constexpr quantity quantity_cast(const quantity& q); ``` ## Strong types instead of aliases, and type downcasting facility diff --git a/src/include/units/quantity.h b/src/include/units/quantity.h index ff547d47..df60532d 100644 --- a/src/include/units/quantity.h +++ b/src/include/units/quantity.h @@ -126,8 +126,8 @@ namespace units { } // namespace detail template - requires same_dim - constexpr To quantity_cast(const quantity& q) + [[nodiscard]] constexpr To quantity_cast(const quantity& q) + requires same_dim { using c_ratio = ratio_divide; using c_rep = std::common_type_t; @@ -136,17 +136,17 @@ namespace units { } template - constexpr quantity quantity_cast(const quantity& q) + [[nodiscard]] constexpr quantity quantity_cast(const quantity& q) { return quantity_cast>(q); } template - constexpr quantity quantity_cast(const quantity& q) + [[nodiscard]] constexpr quantity quantity_cast(const quantity& q) { return quantity_cast>(q); } template - constexpr quantity quantity_cast(const quantity& q) + [[nodiscard]] constexpr quantity quantity_cast(const quantity& q) { return quantity_cast>(q); }