digitalmars.D.bugs - [Issue 10496] New: Initialization in lazy function parameter allows immutable member not to be initialized
- d-bugmail puremagic.com (29/29) Jun 28 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10496
- d-bugmail puremagic.com (32/32) Jun 28 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10496
- d-bugmail puremagic.com (19/19) Jun 28 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10496
http://d.puremagic.com/issues/show_bug.cgi?id=10496
Summary: Initialization in lazy function parameter allows
immutable member not to be initialized
Product: D
Version: D1 & D2
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody puremagic.com
ReportedBy: david.eckardt sociomantic.com
09:00:44 PDT ---
class C
{
immutable int x;
this()
{
this.f(this.x = 5);
}
void f(lazy int x){}
}
C.int isn't initialized, although this code compiles.
Whether C.int is initialized or not depends on the, in general indeterministic,
behavior of f(), this should be a compile time error.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 28 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10496
Dicebot <m.strashun gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |m.strashun gmail.com
I think this is part of a bigger problem:
----------------------------------------
class A
{
immutable int x;
void delegate() f;
this()
{
x = 40;
f = () { x = 42; };
}
}
void main()
{
import std.stdio;
auto a = new A();
writeln(a.x);
a.f();
writeln(a.x);
}
----------------------------------------
40
42
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 28 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10496
Maxim Fomin <maxim maxim-fomin.ru> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |maxim maxim-fomin.ru
---
The root is that delegate construction does not respect immutability at all.
struct S
{
void foo() immutable {}
void baz()
{
//foo();
(&foo)();
}
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 28 2013









d-bugmail puremagic.com 