IFTI, value types, and top-level const

Peter Alexander peter.alexander.au at gmail.com
Fri Jun 7 09:43:11 PDT 2013


On Friday, 7 June 2013 at 16:33:50 UTC, monarch_dodra wrote:
> On Friday, 7 June 2013 at 16:24:16 UTC, monarch_dodra wrote:
>> I seem to specifically remember that it *didn't* work this 
>> way. Isn't this a regression?
>
> ...and I seem to have been wrong. This has never worked.
>
> And I can also confirm that C++ does strip the top level const 
> in this case.
>
> I agree, it would be nice for D to do this too.

Ack, it appears it is only done for arrays and pointers :-S

string foo(T)(T x)
{
	return T.stringof;
}

void main()
{
	class C {}
	const int[] a;
	const int* b;
	const C c;
	const int d;

	import std.stdio;
	writeln(foo(a)); // const(int)[]
	writeln(foo(b)); // const(int)*
	writeln(foo(c)); // const(C)
	writeln(foo(d)); // const(int)
}

Obviously you can't strip anything from (c), but I have no idea 
why (d) isn't stripped. This is bizarre.

... or is this because of the const postblit problem?


More information about the Digitalmars-d mailing list