digitalmars.D.bugs - [Issue 13929] New: nothrow nogc gcd with signed integers
- via Digitalmars-d-bugs (46/46) Jan 03 2015 https://issues.dlang.org/show_bug.cgi?id=13929
https://issues.dlang.org/show_bug.cgi?id=13929 Issue ID: 13929 Summary: nothrow nogc gcd with signed integers Product: D Version: D2 Hardware: x86 OS: Windows Status: NEW Severity: enhancement Priority: P1 Component: Phobos Assignee: nobody puremagic.com Reporter: bearophile_hugs eml.cc void main() nothrow nogc { import std.numeric: gcd; auto z = gcd(10, 20); } dmd 2.067alpha gives: test.d(3,17): Error: nogc function 'D main' cannot call non- nogc function 'std.numeric.gcd!int.gcd' test.d(3,17): Error: 'std.numeric.gcd!int.gcd' is not nothrow test.d(1,6): Error: function 'D main' is nothrow yet may throw Perhaps it's better to replace the enforce() with an assert in a pre-condition. Currently gcd is implemented like this: T gcd(T)(T a, T b) { static if (is(T == const) || is(T == immutable)) { return gcd!(Unqual!T)(a, b); } else { static if (T.min < 0) { enforce(a >= 0 && b >=0); } while (b) { auto t = b; b = a % b; a = t; } return a; } } --
Jan 03 2015