- Title
- gcd and lcm should support a wider range of input values
- Status
- c++17
- Section
- [numeric.ops.gcd][numeric.ops.lcm]
- Submitter
- Marshall Clow

Created on **2016-12-16.00:00:00**
last changed **36 months ago**

Date: 2017-01-30.15:17:53

**Proposed resolution:**

This wording is relative to N4604.

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>`.

Date: 2017-01-27.00:00:00

*[ 2017-01-27 Telecon ]*

Priority 0

Date: 2016-12-16.00:00:00

This is a duplicate of 2792, which addressed LFTS 2.

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 typeMand|n|shall be representable as a value of typeN|m|and|n|shall be representable as a value ofcommon_type_t<M, N>.

History | |||
---|---|---|---|

Date | User | Action | Args |

2017-07-30 20:15:43 | admin | set | status: wp -> c++17 |

2017-03-05 23:41:16 | admin | set | status: ready -> wp |

2017-01-30 15:17:53 | admin | set | messages: + msg8812 |

2017-01-30 15:17:53 | admin | set | status: new -> ready |

2016-12-16 21:24:37 | admin | set | messages: + msg8757 |

2016-12-16 00:00:00 | admin | create |