refactor: in(U) and force_in(U) now return auto to provide better diagnostics on clang

When a strong type was returned clang, instead of on a concept check, failed on `detail::make_quantity` used to provide a function return type.
This commit is contained in:
Mateusz Pusz
2023-09-27 17:10:20 +02:00
parent b4bb7227b9
commit d427849477
2 changed files with 4 additions and 4 deletions

View File

@@ -144,14 +144,14 @@ public:
// conversions // conversions
template<UnitCompatibleWith<unit, quantity_spec> U> template<UnitCompatibleWith<unit, quantity_spec> U>
requires detail::QuantityConvertibleTo<quantity, quantity<detail::make_reference(quantity_spec, U{}), Rep>> requires detail::QuantityConvertibleTo<quantity, quantity<detail::make_reference(quantity_spec, U{}), Rep>>
[[nodiscard]] constexpr quantity<detail::make_reference(quantity_spec, U{}), Rep> in(U) const [[nodiscard]] constexpr Quantity auto in(U) const
{ {
return quantity<detail::make_reference(quantity_spec, U{}), Rep>{*this}; return quantity<detail::make_reference(quantity_spec, U{}), Rep>{*this};
} }
template<UnitCompatibleWith<unit, quantity_spec> U> template<UnitCompatibleWith<unit, quantity_spec> U>
requires requires(quantity q) { value_cast<U{}>(q); } requires requires(quantity q) { value_cast<U{}>(q); }
[[nodiscard]] constexpr quantity<detail::make_reference(quantity_spec, U{}), Rep> force_in(U) const [[nodiscard]] constexpr Quantity auto force_in(U) const
{ {
return value_cast<U{}>(*this); return value_cast<U{}>(*this);
} }

View File

@@ -170,14 +170,14 @@ public:
template<UnitCompatibleWith<unit, quantity_spec> U> template<UnitCompatibleWith<unit, quantity_spec> U>
requires detail::QuantityConvertibleTo<quantity_type, quantity<detail::make_reference(quantity_spec, U{}), Rep>> requires detail::QuantityConvertibleTo<quantity_type, quantity<detail::make_reference(quantity_spec, U{}), Rep>>
[[nodiscard]] constexpr quantity_point<detail::make_reference(quantity_spec, U{}), PO, Rep> in(U) const [[nodiscard]] constexpr QuantityPoint auto in(U) const
{ {
return make_quantity_point<PO>(quantity_ref_from(PO).in(U{})); return make_quantity_point<PO>(quantity_ref_from(PO).in(U{}));
} }
template<UnitCompatibleWith<unit, quantity_spec> U> template<UnitCompatibleWith<unit, quantity_spec> U>
requires requires(quantity_type q) { value_cast<U{}>(q); } requires requires(quantity_type q) { value_cast<U{}>(q); }
[[nodiscard]] constexpr quantity_point<detail::make_reference(quantity_spec, U{}), PO, Rep> force_in(U) const [[nodiscard]] constexpr QuantityPoint auto force_in(U) const
{ {
return make_quantity_point<PO>(quantity_ref_from(PO).force_in(U{})); return make_quantity_point<PO>(quantity_ref_from(PO).force_in(U{}));
} }