Thread overview | |||||
---|---|---|---|---|---|
|
November 22, 2010 [Issue 5256] New: null Rebindable testing not supported | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=5256 Summary: null Rebindable testing not supported Product: D Version: D2 Platform: x86 OS/Version: Windows Status: NEW Keywords: rejects-valid Severity: normal Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: bearophile_hugs@eml.cc --- Comment #0 from bearophile_hugs@eml.cc 2010-11-21 18:55:50 PST --- This D2 program shows that you can't test if a class reference wrapped with Rebindable is null: import std.typecons; const class Foo {} void main() { auto a = Rebindable!Foo(new Foo); a = new Foo; assert(a !is null); // err } DMD 2.050 generates: test.d(6): Error: incompatible types for ((a) !is (null)): 'Rebindable!(const(Foo))' and 'void*' Is this the currently correct way to do it? (It works): assert(a.get() !is null); // OK I have seen the get() method is not documented on the site, so is that a temporary limitation caused by the unfinished "alis this" implementation? (Issue tagged with "Component: DMD" because I think it's a limit of "alias this"). -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 09, 2011 [Issue 5256] null Rebindable testing not supported | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | http://d.puremagic.com/issues/show_bug.cgi?id=5256 Andrei Alexandrescu <andrei@metalanguage.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED CC| |andrei@metalanguage.com AssignedTo|nobody@puremagic.com |andrei@metalanguage.com -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
July 30, 2011 [Issue 5256] null Rebindable testing not supported | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | http://d.puremagic.com/issues/show_bug.cgi?id=5256 bearophile_hugs@eml.cc changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |RESOLVED Resolution| |DUPLICATE --- Comment #1 from bearophile_hugs@eml.cc 2011-07-30 11:03:08 PDT --- assert(a !is null); is wrong code. Bug 4773 is now fixed. Now you are allowed to write: import std.stdio, std.typecons; const class Foo { invariant() { writeln("*"); } } void main() { auto a = Rebindable!Foo(new Foo); a = new Foo; //assert(a); // calls Foo.invariant() //assert(cast(bool)a); // doesn't call Foo.invariant(); auto f = new Foo(); assert(f); // calls Foo.invariant() assert(cast(bool)f); // doesn't call Foo.invariant(); } So I consider this bug too fixed. *** This issue has been marked as a duplicate of issue 4773 *** -- 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