2014-09-16 18 views
5

Si consideri il seguente modello:D: indesiderati funzione anonima attribuisce

mixin template test(void function() callback) 
{ 
    static this() 
    { 
     callback(); 
    } 
} 

Questo funziona:

mixin test!(&sort_arr); 
void sort_arr() 
{ 
    arr.sort; 
} 

Tuttavia questo non funziona:

mixin test!({ arr.sort; }); 

DMD dà il seguente errore :

Error: safe function 'main.__lambda6' cannot call system function '_adSort' 
Error: @nogc function 'main.__lambda6' cannot call [email protected] function '_adSort' 

Mi sembra che la versione lambda sia dedotta per essere safe @nogc, mentre l'esplicito sort_arr non lo è.

Come posso superare questo e passare un lambda anonimo a questo modello?


Edit: bug report archiviato come da raccomandazione nella risposta accettata: https://issues.dlang.org/show_bug.cgi?id=13481

risposta

3

credo che questo sia un bug con inferire gli attributi da built-in proprietà. Puoi segnalarlo sul numero di rilascio di D, al numero http://issues.dlang.org/.

Tuttavia, si noti che la proprietà/funzione integrata .sort è in fase di deprecazione. Utilizzare invece std.algorithm.sort, che non dovrebbe presentare questo problema.

+0

Stavo puntando a 'std.algorithm.sort', non mi rendevo conto che ce n'è uno incorporato ... –

+0

Per chiarire, è necessario importare' std.algorithm' e fare 'arr.sort () 'invece di' arr.sort'. Questo è per ragioni storiche e non sarà necessario alla fine una volta rimosso l'ordinamento predefinito. – Meta

Problemi correlati