| immutable(T)[] assumeUnique(T)(ref T[] array) pure nothrow |
| { |
| auto result = cast(immutable(T)[]) array; |
| array = null; |
| return result; |
| } |
| |
| pure nothrow |
| private string escapeShellArguments() |
| { |
| char[] buf; |
| |
| @safe nothrow |
| char[] allocator(size_t size) |
| { |
| return buf = new char[size]; |
| } |
| |
| escapeShellArgument!allocator("foo"); |
| return assumeUnique(buf); |
| } |
| |
| @safe nothrow |
| auto escapeShellArgument(alias allocator)(in char[] arg) |
| { |
| auto buf = allocator(4); |
| buf[0] = 'f'; |
| buf[1] = 'o'; |
| buf[2] = 'o'; |
| buf[3] = '\0'; |
| } |
| |
| void main() |
| { |
| string res = escapeShellArguments(); |
| if (res != "foo\0") assert(0); |
| } |