diff --git a/docs/use_cases/custom_representation_types.rst b/docs/use_cases/custom_representation_types.rst index 37ca2efd..46f16d76 100644 --- a/docs/use_cases/custom_representation_types.rst +++ b/docs/use_cases/custom_representation_types.rst @@ -36,7 +36,7 @@ The simplest representation type that fulfills the above requirements can look a std::intmax_t value_; public: my_rep() = default; - explicit constexpr my_rep(std::intmax_t v) noexcept : value_(v) {} + constexpr explicit my_rep(std::intmax_t v) noexcept : value_(v) {} [[nodiscard]] bool operator==(my_rep) const = default; diff --git a/src/include/units/bits/external/fixed_string.h b/src/include/units/bits/external/fixed_string.h index 9a20954a..6fb65749 100644 --- a/src/include/units/bits/external/fixed_string.h +++ b/src/include/units/bits/external/fixed_string.h @@ -43,9 +43,9 @@ struct basic_fixed_string { using iterator = CharT*; using const_iterator = const CharT*; - constexpr basic_fixed_string(CharT ch) noexcept { data_[0] = ch; } + constexpr explicit(false) basic_fixed_string(CharT ch) noexcept { data_[0] = ch; } - constexpr basic_fixed_string(const CharT (&txt)[N + 1]) noexcept + constexpr explicit(false) basic_fixed_string(const CharT (&txt)[N + 1]) noexcept { if constexpr (N != 0) for (std::size_t i = 0; i < N; ++i) data_[i] = txt[i]; diff --git a/src/include/units/quantity.h b/src/include/units/quantity.h index 9ea29b5a..8e604cfa 100644 --- a/src/include/units/quantity.h +++ b/src/include/units/quantity.h @@ -133,15 +133,15 @@ public: quantity(quantity&&) = default; template Value> - explicit(!(is_same_v && is_same_v)) - constexpr quantity(const Value& v) : value_(v) {} + constexpr explicit(!(is_same_v && is_same_v)) + quantity(const Value& v) : value_(v) {} template Q> - constexpr quantity(const Q& q) : value_(quantity_cast(q).count()) {} + constexpr explicit(false) quantity(const Q& q) : value_(quantity_cast(q).count()) {} template requires safe_castable_to_, quantity> - explicit constexpr quantity(const Q& q) : quantity(quantity_like_type(quantity_like_traits::count(q))) {} + constexpr explicit quantity(const Q& q) : quantity(quantity_like_type(quantity_like_traits::count(q))) {} quantity& operator=(const quantity&) = default; quantity& operator=(quantity&&) = default; diff --git a/src/include/units/quantity_point.h b/src/include/units/quantity_point.h index c1854b19..dcb982f2 100644 --- a/src/include/units/quantity_point.h +++ b/src/include/units/quantity_point.h @@ -70,7 +70,7 @@ public: template requires std::is_convertible_v - constexpr quantity_point(const QP2& qp) : q_{qp.relative()} {} + constexpr explicit(false) quantity_point(const QP2& qp) : q_{qp.relative()} {} quantity_point& operator=(const quantity_point&) = default; quantity_point& operator=(quantity_point&&) = default; diff --git a/src/include/units/ratio.h b/src/include/units/ratio.h index 7b1ea90b..17a97613 100644 --- a/src/include/units/ratio.h +++ b/src/include/units/ratio.h @@ -51,7 +51,7 @@ struct ratio { std::intmax_t den; std::intmax_t exp; - explicit constexpr ratio(std::intmax_t n, std::intmax_t d = 1, std::intmax_t e = 0): num(n), den(d), exp(e) + constexpr explicit ratio(std::intmax_t n, std::intmax_t d = 1, std::intmax_t e = 0): num(n), den(d), exp(e) { gsl_Expects(den != 0); detail::normalize(num, den, exp); diff --git a/test/unit_test/static/custom_rep_test_min_expl.cpp b/test/unit_test/static/custom_rep_test_min_expl.cpp index c2860b92..aa049414 100644 --- a/test/unit_test/static/custom_rep_test_min_expl.cpp +++ b/test/unit_test/static/custom_rep_test_min_expl.cpp @@ -44,7 +44,7 @@ public: min_expl() requires (Mode != 1) = default; // construction from std::int64_t - explicit constexpr min_expl(std::intmax_t v) noexcept requires (Mode != 2) : value_(v) {} + constexpr explicit min_expl(std::intmax_t v) noexcept requires (Mode != 2) : value_(v) {} // copy construction min_expl(const min_expl&) requires (Mode != 3) = default;