digitalmars.D.bugs - [Issue 3833] New: pure/nothrow functions/delegates are a subtype of the nonpure/throw ones
- d-bugmail puremagic.com (46/46) Feb 18 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3833
- d-bugmail puremagic.com (6/6) Dec 16 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3833
- d-bugmail puremagic.com (14/14) Feb 02 2011 http://d.puremagic.com/issues/show_bug.cgi?id=3833
- d-bugmail puremagic.com (14/14) Jun 08 2011 http://d.puremagic.com/issues/show_bug.cgi?id=3833
http://d.puremagic.com/issues/show_bug.cgi?id=3833 Summary: pure/nothrow functions/delegates are a subtype of the nonpure/throw ones Product: D Version: 2.040 Platform: Other OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc This compiles, but it's an error because the array is mixed, &sqr is not pure: void main() { double sqr(double x) { return x * x; } pure double psqr(double x) { return x * x; } pure double delegate(double)[] funcs = [&sqr, &psqr]; } This doesn't compile, but pure functions are a subsets of impure functions: pure real sqr1(real x) { return x * x; } real sqr2(real x) { return x * x; } void main() { real function(real x)[] funcs = [&sqr1, &sqr2]; } While this compiles: void main() { double sqr(double x) { return x * x; } pure double psqr(double x) { return x * x; } double delegate(double)[] funcs = [&sqr, &psqr]; } The following doesn't compile, but nothrow functions are a subset of throwing functions: nothrow real sqr1(real x) { return x * x; } real sqr2(real x) { if (x == 0) throw new Error(""); return x * x; } void main() { real function(real x)[] funcs = [&sqr1, &sqr2]; } (Similar things happen with "pure nothrow" functions/delegates.) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 18 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3833 With dmd 2.051beta all four examples don't compile, so the DMD is more strict. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 16 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3833 This D2 program shows a cost of a strong type system: creating collections of functions becomes a problem because there are so many attributes that change a type. This specific problem is solved managing correctly variance/covariance of function pointers and delegates, typing the array 'a' as an array of impure nothrow trusted functions: import std.math; void main() { auto a = [&asin, &cbrt]; } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 02 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3833 yebblies <yebblies gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |yebblies gmail.com Resolution| |DUPLICATE I'm going to mark this as a dupe of 3180, along with 4000, as both cases are covered by covariance. *** This issue has been marked as a duplicate of issue 3180 *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 08 2011