LINUX.ORG.RU

nested delegate in D


0

0

Следующая программа на языке D, как написано в мануале должна
выдавать результат false, true, но почему-то doit видит n не таким,
каким он был проинициализирован и выдаёт UB. Версия DMD 1.030, GDC
0.24. В чём может быть проблема?

import std.stdio;

bool delegate(T) gtn(T) ( T n )
{
	writefln( n );
	bool doit( T m )
	{
		writefln( "%d > %d", m, n );
		return m > n;
	}
	return &doit;
}

               	
void main()
{
	auto g5 = gtn( 5 );
	writefln( g5( 1 ) );
	writefln( g5( 6 ) );
}
anonymous

В D 1 нет полноценных замыканий. n ссылается на стек, и после завершения gtn ссылается в не то место, поэтому поведение неопределено. Либо эмулируйте замыкания, либо используйте вторую версию.

Legioner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.