Thread overview | ||||||
---|---|---|---|---|---|---|
|
February 18, 2010 [Issue 3833] New: pure/nothrow functions/delegates are a subtype of the nonpure/throw ones | ||||
---|---|---|---|---|
| ||||
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 --- Comment #0 from bearophile_hugs@eml.cc 2010-02-18 12:58:00 PST --- 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: ------- |
December 16, 2010 [Issue 3833] pure/nothrow functions/delegates are a subtype of the nonpure/throw ones | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | http://d.puremagic.com/issues/show_bug.cgi?id=3833 --- Comment #1 from bearophile_hugs@eml.cc 2010-12-16 00:50:55 PST --- 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: ------- |
February 02, 2011 [Issue 3833] pure/nothrow functions/delegates are a subtype of the nonpure/throw ones | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | http://d.puremagic.com/issues/show_bug.cgi?id=3833 --- Comment #2 from bearophile_hugs@eml.cc 2011-02-02 10:15:39 PST --- 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: ------- |
June 09, 2011 [Issue 3833] pure/nothrow functions/delegates are a subtype of the nonpure/throw ones | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | 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 --- Comment #3 from yebblies <yebblies@gmail.com> 2011-06-08 22:48:20 PDT --- 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: ------- |
Copyright © 1999-2021 by the D Language Foundation