Created on 2016-11-09.00:00:00 last changed 89 months ago
Proposed resolution:
This wording is relative to N4600.
Edit [numeric.ops.gcd] as indicated:
template<class M, class N> constexpr common_type_t<M, N> gcd(M m, N n);-2- Requires:
|m| shall be representable as a value of type M and |n| shall be representable as a value of type N|m| and |n| shall be representable as a value of common_type_t<M, N>. [Note: These requirements ensure, for example, that gcd(m, m) = |m| is representable as a value of type M. — end note]
Edit [numeric.ops.lcm] as indicated:
template<class M, class N> constexpr common_type_t<M, N> lcm(M m, N n);-2- Requires:
|m| shall be representable as a value of type M and |n| shall be representable as a value of type N|m| and |n| shall be representable as a value of common_type_t<M, N>. The least common multiple of |m| and |n| shall be representable as a value of type common_type_t<M, N>.
[ Issues Telecon 16-Dec-2016 ]
Resolved by N4616
Addresses fund.ts.v2: JP 010, JP 011
By the current definition, gcd((int64_t)1234, (int32_t)-2147483648) is ill-formed (because 2147483648 is not representable as a value of int32_t.) We want to change this case to be well-formed. As long as both |m| and |n| are representable as values of the common type, absolute values can be calculate d without causing unspecified behavior, by converting m and n to the common type before taking the negation. Suggested resolution:
|m| shall be representable as a value of type M and |n| shall be representable as a value of type N|m| and |n| shall be representable as a value of common_type_t<M, N>.
History | |||
---|---|---|---|
Date | User | Action | Args |
2017-07-30 20:10:41 | admin | set | status: wp -> open |
2016-12-16 20:56:38 | admin | set | messages: + msg8723 |
2016-12-16 20:56:38 | admin | set | status: new -> wp |
2016-11-09 20:24:33 | admin | set | messages: + msg8591 |
2016-11-09 00:00:00 | admin | create |