On 01/29/2013 12:32 PM, Vladimir Panteleev wrote: > I would like to add some information to any exceptions thrown inside the > loop's body (e.g. whatever std.conv.to may throw), in our case the line > number.
Here is a RAII idea that takes advantage of exception chaining without directly using the 'next' parameter. It constructs a LineInfo object ready to throw in its destructor unless specifically told that it is not necessary anymore.
import std.stdio; import std.string; import std.conv; void main() { auto lines = [ "42", "100", "hello" ]; int[] numbers; struct LineInfo { size_t lineNumber; bool allIsGood = false; ~this() { if (!allIsGood) { throw new Exception(format("Line number: %s", lineNumber)); } } } foreach (lineNumber, line; lines) { auto info = LineInfo(lineNumber); numbers ~= to!int(line); info.allIsGood = true; } } Ali