[dmd 2.066] Is scope with nothrow regression?

2014-07-06 Thread NCrashed via Digitalmars-d-learn


```
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

```


Re: [dmd 2.066] Is scope with nothrow regression?

2014-07-06 Thread via Digitalmars-d-learn

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.


Re: [dmd 2.066] Is scope with nothrow regression?

2014-07-06 Thread hane via Digitalmars-d-learn

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


Re: [dmd 2.066] Is scope with nothrow regression?

2014-07-06 Thread NCrashed via Digitalmars-d-learn

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:


```
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.


Thank you, I was expecting different behavior for a long time and 
now will use try-catch instead.


Re: [dmd 2.066] Is scope with nothrow regression?

2014-07-06 Thread hane via Digitalmars-d-learn

On Sunday, 6 July 2014 at 22:03:21 UTC, hane wrote:

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


To be exact: a bug I said is that scope(failure) { } breaks 
nothrow checking.