feat: = delete should have a reason

This commit is contained in:
Mateusz Pusz
2024-06-22 18:59:00 +02:00
parent 47c5563e16
commit 83264860aa
4 changed files with 32 additions and 5 deletions

View File

@@ -24,6 +24,7 @@
#pragma once
// IWYU pragma: private, include <mp-units/framework.h>
#include <mp-units/bits/hacks.h>
#include <mp-units/bits/module_macros.h>
#include <mp-units/bits/sudo_cast.h>
#include <mp-units/compat_macros.h>
@@ -229,7 +230,12 @@ public:
template<Unit U>
requires(U{} == unit)
constexpr const rep&& numerical_value_ref_in(U) const&& noexcept = delete;
constexpr const rep&& numerical_value_ref_in(U) const&& noexcept
#if __cpp_deleted_function
= delete("Can't form a reference to a temporary");
#else
= delete;
#endif
template<UnitCompatibleWith<unit, quantity_spec> U>
requires requires(quantity q) { q.in(U{}); }

View File

@@ -23,6 +23,7 @@
#pragma once
// IWYU pragma: private, include <mp-units/framework.h>
#include <mp-units/bits/hacks.h>
#include <mp-units/bits/module_macros.h>
#include <mp-units/framework/compare.h>
#include <mp-units/framework/customization_points.h>
@@ -241,7 +242,12 @@ public:
template<PointOrigin PO2>
requires(PO2{} == point_origin)
constexpr const quantity_type&& quantity_ref_from(PO2) const&& noexcept = delete;
constexpr const quantity_type&& quantity_ref_from(PO2) const&& noexcept
#if __cpp_deleted_function
= delete("Can't form a reference to a temporary");
#else
= delete;
#endif
template<PointOrigin PO2>
requires requires { quantity_point{} - PO2{}; }

View File

@@ -240,12 +240,22 @@ template<typename Rep, Reference R>
template<Reference R, typename Rep>
requires RepresentationOf<std::remove_cvref_t<Rep>, get_quantity_spec(R{}).character>
// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
constexpr auto operator*(R, Rep&&) = delete;
constexpr auto operator*(R, Rep&&)
#if __cpp_deleted_function
= delete("To create a `quantity` or `quantity_point` use `Rep * R`");
#else
= delete;
#endif
template<Reference R, typename Rep>
requires RepresentationOf<std::remove_cvref_t<Rep>, get_quantity_spec(R{}).character>
// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
constexpr auto operator/(R, Rep&&) = delete;
constexpr auto operator/(R, Rep&&)
#if __cpp_deleted_function
= delete("To create a `quantity` or `quantity_point` use `Rep / R`");
#else
= delete;
#endif
template<typename Q, Reference R>
requires Quantity<std::remove_cvref_t<Q>>

View File

@@ -449,7 +449,12 @@ template<Magnitude M, Unit U>
return scaled_unit<M{}, U>{};
}
[[nodiscard]] consteval Unit auto operator*(Unit auto, Magnitude auto) = delete;
[[nodiscard]] consteval Unit auto operator*(Unit auto, Magnitude auto)
#if __cpp_deleted_function
= delete("To scale a unit use `mag * unit` syntax");
#else
= delete;
#endif
/**
* Returns the result of multiplication with an inverse unit.