Why do I get this error when casting to an immutable or shared byRef return type?

Gary Willoughby via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jun 19 03:35:59 PDT 2016


In the following code, the `foo` function doesn't work when 
casting to an immutable or shared type. Can anyone please explain 
what is happening here? Is there any way of returning such 
variables byRef from a malloc'd chunk of memory?

import core.stdc.stdlib;

ref T foo(T)()
{
	int* foo = cast(int*) malloc(int.sizeof * 8);

	return *foo;
}

void main(string[] args)
{
	// Works!
	auto bar = foo!(int)();

	// Works!
	auto bar = foo!(const(int))();

	// Error: cast(immutable(int))*foo is not an lvalue
	auto bar = foo!(immutable(int))();

	// Error: cast(shared(int))*foo is not an lvalue
	auto bar = foo!(shared(int))();
}


More information about the Digitalmars-d-learn mailing list