Why is the return statement required, while nothing after the Exception is executed? Error: one path skips constructor public this(string p1, string p2, string p3) { string json = download_string(...); if (json is null) { throw new Exception("404"); writeln("test"); return; } else { this(json); } } package this(string json) { ... }