diff --git a/cmake/warnings.cmake b/cmake/warnings.cmake index cf1a8435..a4283dde 100644 --- a/cmake/warnings.cmake +++ b/cmake/warnings.cmake @@ -73,6 +73,11 @@ macro(_set_flags) set(GCC_WARNINGS ${CLANG_WARNINGS} + -Wno-float-conversion + -Wno-shorten-64-to-32 + -Wno-implicit-float-conversion + -Wno-implicit-int-float-conversion + -Wno-implicit-int-conversion -Wmisleading-indentation # warn if indentation implies blocks where blocks do not exist -Wduplicated-cond # warn if if / else chain has duplicated conditions -Wduplicated-branches # warn if if / else branches have duplicated code diff --git a/src/include/units/bits/external/hacks.h b/src/include/units/bits/external/hacks.h index adae44f2..e9fec31f 100644 --- a/src/include/units/bits/external/hacks.h +++ b/src/include/units/bits/external/hacks.h @@ -31,7 +31,11 @@ #define COMP_MSVC _MSC_VER #endif -#if COMP_CLANG && false +#if defined(COMP_CLANG) && !defined(UNITS_LIBCXX) +#define UNITS_LIBCXX 0 +#endif + +#if COMP_CLANG && UNITS_LIBCXX #include #include @@ -60,7 +64,7 @@ namespace std { template concept default_constructible = constructible_from; -#elif COMP_CLANG && false +#elif COMP_CLANG && UNITS_LIBCXX // concepts using concepts::three_way_comparable; diff --git a/src/include/units/quantity_cast.h b/src/include/units/quantity_cast.h index 73702716..d8bc39e5 100644 --- a/src/include/units/quantity_cast.h +++ b/src/include/units/quantity_cast.h @@ -290,7 +290,7 @@ template requires requires { requires is_specialization_of; requires requires { quantity_cast(qk.common()); }; } || requires { requires Kind; requires UnitOf; } || - requires { requires requires { quantity_cast(qk.common()); }; } + requires { quantity_cast(qk.common()); } { if constexpr (is_specialization_of) return CastSpec(quantity_cast(qk.common())); @@ -349,7 +349,7 @@ template requires requires { requires is_specialization_of; requires requires { quantity_kind_cast(qpk.relative()); }; } || requires { requires PointKind && UnitOf; } || - requires { requires requires { quantity_kind_cast(qpk.relative()); }; } + requires { quantity_kind_cast(qpk.relative()); } { if constexpr (is_specialization_of) return CastSpec(quantity_kind_cast(qpk.relative())); diff --git a/test/unit_test/static/quantity_test.cpp b/test/unit_test/static/quantity_test.cpp index 90fa46cc..6d945ec8 100644 --- a/test/unit_test/static/quantity_test.cpp +++ b/test/unit_test/static/quantity_test.cpp @@ -44,11 +44,6 @@ using namespace unit_constants; constexpr auto cgs_cm = cgs::unit_constants::cm; -#if UNITS_DOWNCAST_MODE == 0 -template -constexpr bool is_same_v = equivalent; -#endif - ////////////////////////////// // quantity class invariants @@ -748,7 +743,7 @@ static_assert(quantity_cast(2000.0_q_m / 3600.0_q static_assert(quantity_cast(1 * cgs_cm) == 1 * cm); static_assert(is_same_v(2_q_dm3)), volume>); -static_assert(!std::same_as(2_q_dm3)), volume>); +static_assert(!is_same_v(2_q_dm3)), volume>); //////////////// // downcasting