https://issues.dlang.org/show_bug.cgi?id=17818
Vino <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|INVALID |--- --- Comment #2 from Vino <[email protected]> --- Hi Jonathan. Thank you very much, as stated by you I used the auto function and now i am able to get the output without any warnings, but this do not help me in my overall program, meaning, when I call this sub function from the main thread function program it is not working as expected and throwing an error. Sub Function: auto coSizeDirList (string FFs, int SizeDir) { ulong subdirTotal; ulong subdirTotalGB; Array!string Subdir; Array!ulong Subsize; //Tuple!((Array!string), (Array!string)) Result; auto dFiles = Array!string ((dirEntries(FFs, SpanMode.shallow).filter!(a => a.isDir))[].map!(a => a.name)); foreach (d; dFiles[]) { auto SdFiles = Array!ulong(dirEntries(d, SpanMode.depth).map!(a => a.size)); foreach(f; SdFiles[]) { subdirTotal += f; } subdirTotalGB = (subdirTotal/1024/1024); { Subdir ~= d; Subsize ~= subdirTotalGB; } if (subdirTotalGB > SizeDir) subdirTotal = 0; } return tuple (Subdir[], Subsize[]); } Main Thread function : void ptSizeDirList (string[] SizeDirlst, int SizeDir) { try { //Array!string MStext; string[][] MStext; // Getting Error on this line, while trying to change it to auto; auto MSresult = taskPool.workerLocalStorage(MStext); logF.writeln("Function \t : List the Folder whose Size greater then ", SizeDir, " GB"); logF.writeln("Dir. Scanned \t :", SizeDirlst); logF.writeln("************************************************************************************"); logF.writefln("%-63s %.20s", "File Name", "Size (GB)"); logF.writeln("************************************************************************************"); foreach (string Fs; parallel(SizeDirlst[0 .. $], 1)) { auto FFs = Fs.strip; auto MSizeDirList = task(&coSizeDirList, FFs, SizeDir); MSizeDirList.executeInNewThread(); auto MSizeDirListData = MSizeDirList.workForce; MSresult.get ~= MSizeDirListData; } foreach(i; MSresult.toRange) if (!i.empty) { writefln("%(%-(%-63s %)\n%)", i[].sort!((a,b) => a[0] < b[0]).uniq); } writeln("************************************************************************************"); } catch (Exception e) { writeln(e.msg); } } void main () { string SizeDirlst = "C:\\Temp\\sapnas2\\BACKUP"; int SizeDir = 1; ptSizeDirList(SizeDirlst, SizeDir); } Error: Error: no identifier for declarator MStext Deprecation: use { } for an empty statement, not ; So what should i use to the line " string[][] MStext" in my main function and also, I have another program which return the range and passes the range as a function argument to another function which throws the same deprecation warning. Eg : auto function1 () { return tuple(data) // range array } void funciton2(RangeT!(Array!string) data2) { string data3 = "Test1"; string data4 = data3 ~ data2; writeln(data4); } void main () { string data2 = function1[]; funciton2(data2); } } Deprecation message at line auto funciton2(RangeT!(Array!string) data2). From, Vino.B --
