digitalmars.D.learn - [dmd 2.066] Is scope with nothrow regression?
- NCrashed (18/18) Jul 06 2014 ```
- "Marc =?UTF-8?B?U2Now7x0eiI=?= <schuetzm gmx.net> (3/21) Jul 06 2014 This is not an error. `scope(failure)` doesn't swallow the
- NCrashed (3/27) Jul 06 2014 Thank you, I was expecting different behavior for a long time and
- hane (5/23) Jul 06 2014 This is a bug which was already fixed.
- hane (3/29) Jul 06 2014 To be exact: "a bug" I said is that scope(failure) { } breaks
```
void bar()
{
throw new Exception("");
}
void foo() nothrow
{
scope(failure) {}
bar();
}
void main() {}
```
Doesn't compile with 2.066:
```
source/app.d(9): Error: 'app.bar' is not nothrow
source/app.d(6): Error: function 'app.foo' is nothrow yet may
throw
```
Jul 06 2014
On Sunday, 6 July 2014 at 12:31:42 UTC, NCrashed wrote:
```
void bar()
{
throw new Exception("");
}
void foo() nothrow
{
scope(failure) {}
bar();
}
void main() {}
```
Doesn't compile with 2.066:
```
source/app.d(9): Error: 'app.bar' is not nothrow
source/app.d(6): Error: function 'app.foo' is nothrow yet may
throw
```
This is not an error. `scope(failure)` doesn't swallow the
exceptions it catches, it rethrows them when it's done.
Jul 06 2014
On Sunday, 6 July 2014 at 13:04:35 UTC, Marc Schütz wrote:On Sunday, 6 July 2014 at 12:31:42 UTC, NCrashed wrote:Thank you, I was expecting different behavior for a long time and now will use try-catch instead.``` void bar() { throw new Exception(""); } void foo() nothrow { scope(failure) {} bar(); } void main() {} ``` Doesn't compile with 2.066: ``` source/app.d(9): Error: 'app.bar' is not nothrow source/app.d(6): Error: function 'app.foo' is nothrow yet may throw ```This is not an error. `scope(failure)` doesn't swallow the exceptions it catches, it rethrows them when it's done.
Jul 06 2014
On Sunday, 6 July 2014 at 12:31:42 UTC, NCrashed wrote:
```
void bar()
{
throw new Exception("");
}
void foo() nothrow
{
scope(failure) {}
bar();
}
void main() {}
```
Doesn't compile with 2.066:
```
source/app.d(9): Error: 'app.bar' is not nothrow
source/app.d(6): Error: function 'app.foo' is nothrow yet may
throw
```
This is a bug which was already fixed.
Instead, you can use this:
scope(failure) assert(0);
See: https://issues.dlang.org/show_bug.cgi?id=11542
Jul 06 2014
On Sunday, 6 July 2014 at 22:03:21 UTC, hane wrote:On Sunday, 6 July 2014 at 12:31:42 UTC, NCrashed wrote:To be exact: "a bug" I said is that scope(failure) { } breaks nothrow checking.``` void bar() { throw new Exception(""); } void foo() nothrow { scope(failure) {} bar(); } void main() {} ``` Doesn't compile with 2.066: ``` source/app.d(9): Error: 'app.bar' is not nothrow source/app.d(6): Error: function 'app.foo' is nothrow yet may throw ```This is a bug which was already fixed. Instead, you can use this: scope(failure) assert(0); See: https://issues.dlang.org/show_bug.cgi?id=11542
Jul 06 2014









"NCrashed" <NCrashed gmail.com> 