On Wednesday 13 July 2011 11:56:10 Tyro[a.c.edwards] wrote: > Methinks function local imports (introduced in 2.054) is a great idea, > however if it is to be allowed, I believe it should provide all the > functionality of global imports: which it currently does not. > > import std.stdio; > import std.string; > import std.conv; > > // Note: all of these import formats work if imported here but only > // the first work if imported locally to the function. > > //import std.utf; > //import std.utf: toUTF16z; > //import std.utf: wcp = toUTF16z; > > void main() > { > auto s = "漢字を書くのはどうかな~?"; > auto s1 = genText(s); > writeln(to!string(typeid(s1))); > } > > auto genText(string t) > { > import std.utf; // This works > //import std.utf: toUTF16z; // This doesn't > //import std.utf: wcp = toUTF16z; // Neither does this > > version(Unicode) > { > // Note: Everything here works with global import > // but only the first line works with function local imports > > return toUTF16z(t); // This works > //return t.toUTF16z; // This doesn't > //return wcp(t); // Neither does this > //return t.wcp; // Or this > } > else > { > return t.toStringz; > } > }
import std.utf: toUTF16z; is broken to begin with: http://d.puremagic.com/issues/show_bug.cgi?id=314 http://d.puremagic.com/issues/show_bug.cgi?id=5161 Rather than just importing the symbol like it should, a selective import essentially create a new symbol. So, that's probably why it doesn't work when importing inside of a function. > [OT - toUTFz] > > Wasn't there discussion about adding toUTFz to the std.utf? For some > reason I thought that was forthcoming in 2.054... whatever happened there? It hasn't been merged in yet. It should be in 2.055. https://github.com/D-Programming-Language/phobos/pull/123 - Jonathan M Davis