On Wednesday, 27 January 2016 at 17:08:09 UTC, Andrei
Alexandrescu wrote:
On 01/27/2016 09:51 AM, Shachar Shemesh wrote:
import std.stdio;
struct RAII {
int num;
~this() {
writefln("Destructed %s", num);
}
}
struct Container {
int num;
RAII raii;
this(int num) {
writefln("Constructing %s", num);
this.num = num;
raii = RAII(num);
if( num==0 )
throw new Exception("Ooops");
}
}
void test(int num) {
try {
auto c = Container(num);
writefln("Point %s", num);
} catch(Exception ex) {
writefln("Caught %s", ex.msg);
}
}
void main()
{
test(1);
test(0);
}
Interesting. It may be worked around, but is arguably a mistake
in the language definition. Have you submitted an issue for
this? -- Andrei
https://github.com/D-Programming-Language/dmd/pull/5151 has been
on the table since Aug 14, 2015.