Allocators
Timon Gehr
timon.gehr at gmx.ch
Sat Aug 24 14:13:23 PDT 2013
On 08/24/2013 12:42 AM, Peter Alexander wrote:
> On Friday, 23 August 2013 at 20:20:21 UTC, Timon Gehr wrote:
>> On 08/23/2013 10:08 PM, Peter Alexander wrote:
>>> On Friday, 23 August 2013 at 20:04:28 UTC, H. S. Teoh wrote:
>>>> What's the problem with const again?
>>>
>>> I'm thinking mainly of const postblit, and the ramifications of solving
>>> that.
>>
>> What problem does const postblit have that a const constructor does
>> not have?
>
> Currently, const postblit completely breaks the type system.
>
> struct Foo
> {
> this(this) { *p = 2; }
> int* p;
> }
> ...
That's a mutable postblit, but I see the point.
> void main()
> {
> import std.stdio;
> immutable int i = 1;
> const(Foo) a = const(Foo)(&i);
> const(Foo) b = a;
I think this line should fail for lack of an appropriately qualified
postblit.
> writeln(a.p, " ", *a.p);
> writeln(b.p, " ", *b.p);
> writeln(&i, " ", i);
> }
>
> For me, this gives:
>
> 7FFF5257D418 2
> 7FFF5257D418 2
> 7FFF5257D418 1
>
> The immutable int is changed, and apparently the same address has two
> different values at the same time!
>
> I'm not aware of any way to do this with constructors, but maybe I'm
> just not aware :-)
import std.stdio;
void main(){
void check(immutable(int)* ptr){
writeln(ptr," ",*ptr);
}
struct S{
immutable(int) x;
this(int)const{
check(&x);
x=2;
check(&x);
}
}
auto s = S(0);
}
7FFFAFAA4B80 0
7FFFAFAA4B80 2
More information about the Digitalmars-d
mailing list