Current limitations of -dip1000

meppl mephisto at nordhoff-online.de
Tue Oct 10 09:55:13 UTC 2017


On Tuesday, 10 October 2017 at 02:37:21 UTC, Walter Bright wrote:
> On 10/9/2017 8:04 AM, Per Nordlöw wrote:
>> ...
>
> Get rid of the templates, too. Replace T with int. Get rid of 
> any of the layers of confusing complexity.
> ...

this looks like an issue to me. If its a template the pointer can 
escape. The non-template-version doesnt let the pointer escape

@safe:
struct ST( T) {
	@safe:
	T[ 128] x;
	scope ref T front() return {
		return x[ 0];
	}
	scope T* pointer() return {
		return &x[ 0];
	}
}
ref int testFrontT() {
	ST!int s;
	return s.front(); // pointer escapes
}
int* testPointerT() {
	ST!int s;
	return s.pointer(); // pointer escapes
}

struct S {
	@safe:
	int[ 128] x;
	scope ref int front() return {
		return x[ 0];
	}
	scope int* pointer() return {
		return &x[ 0];
	}
}
ref int testFront() {
	S s;
	return s.front(); // error
}
int* testPointer() {
	S s;
	return s.pointer(); // error
}


More information about the Digitalmars-d mailing list