Implicit Conversions in Struct Construction
monarch_dodra
monarchdodra at gmail.com
Fri Oct 19 06:05:56 PDT 2012
On Friday, 19 October 2012 at 09:36:14 UTC, Jonathan M Davis
wrote:
> On Friday, October 19, 2012 10:59:07 bearophile wrote:
>> Jonathan M Davis:
>> > Except that that won't work for int or other built-in types,
>> > because they lack constructors.
>>
>> Isn't it possible to modify D and add constructors to built-in
>> types?
>>
>> int(10)
>
> Of course, it would be possible. Whether Walter would agree to
> though, I have
> no idea. C++ allows it only because it allows you to use the
> cast operator in
> reverse - i.e. int(10) is identical to (int)10 - though it
> wouldn't need it in
> the OP's example, because it would do the implicit conversion.
>
> What I'd like to see even more is the ability to do
>
> auto i = new int(10);
>
> which would be particularly useful with immutable, since right
> now, it's
> impossible to create an immutable pointer to int with a value
> of anything
> other than 0 without casting.
>
> - Jonathan M Davis
You can use the array.ptr "trick" (or exploit):
void main()
{
immutable int a = 5;
immutable(int)* p1 = [a].ptr;
immutable(int*) p2 = [a].ptr;
}
That said, it is ugly as sin, and "new int(5)" should definitely
supported.
Same thing with structs actually, which can be "agglomerate
constructed", or "default copy constructed" : If you can write
"auto a = T(x);" you should be able to write "auto p = new T(x)";
More information about the Digitalmars-d-learn
mailing list