Skip to content

Commit bb7d050

Browse files
committed
fix some edge cases of Number operations
1 parent e13aecb commit bb7d050

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

include/units/units.hpp

+9-6
Original file line numberDiff line numberDiff line change
@@ -410,18 +410,21 @@ constexpr Q operator-(Q lhs, R rhs)
410410
}
411411

412412
template<isQuantity Q>
413-
constexpr Q operator*(Q quantity, double multiple) {
414-
return Q(quantity.internal() * multiple);
413+
requires(!std::is_same_v<Q, Number>)
414+
constexpr Q operator*(Q quantity, Number multiple) {
415+
return Q(quantity.internal() * multiple.internal());
415416
}
416417

417418
template<isQuantity Q>
418-
constexpr Q operator*(double multiple, Q quantity) {
419-
return Q(quantity.internal() * multiple);
419+
requires(!std::is_same_v<Q, Number>)
420+
constexpr Q operator*(Number multiple, Q quantity) {
421+
return Q(quantity.internal() * multiple.internal());
420422
}
421423

422424
template<isQuantity Q>
423-
constexpr Q operator/(Q quantity, double divisor) {
424-
return Q(quantity.internal() / divisor);
425+
requires(!std::is_same_v<Q, Number>)
426+
constexpr Q operator/(Q quantity, Number divisor) {
427+
return Q(quantity.internal() / divisor.internal());
425428
}
426429

427430
template<isQuantity Q1, isQuantity Q2>

src/main.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ void initialize() {
2828
ab *= a;
2929
}
3030

31+
constexpr void numberOperatorTests() {
32+
Number a = Number(2) * 2;
33+
Number b = 2 * Number(2);
34+
Number c = 1 / Number(2);
35+
Number d = Number(2) / 2;
36+
auto e = Number(1) / 2_in;
37+
}
38+
3139
constexpr void miscTests() {
3240
units::AccelerationPose a(1_mps2, 2_mps2);
3341
Number num = Number(1.0);

0 commit comments

Comments
 (0)