Thread overview
Lazy param with nothrow
Mar 01, 2016
Andrea Fontana
Mar 01, 2016
Nemo
Mar 01, 2016
Andrea Fontana
Mar 01, 2016
ag0aep6g
March 01, 2016
This very very simple function [1] won't compile.
It says that param t is not nothrow. Why? What's wrong with this?

http://dpaste.dzfl.pl/bfc382e62711


March 01, 2016
On Tuesday, 1 March 2016 at 13:35:08 UTC, Andrea Fontana wrote:
> This very very simple function [1] won't compile.
> It says that param t is not nothrow. Why? What's wrong with this?
>
> http://dpaste.dzfl.pl/bfc382e62711

writeln isn't nothrow so you can't call it from test which is nothrow without a try .. catch.
The error message is misleading.
March 01, 2016
On 01.03.2016 14:35, Andrea Fontana wrote:
> This very very simple function [1] won't compile.
> It says that param t is not nothrow. Why? What's wrong with this?
>
> http://dpaste.dzfl.pl/bfc382e62711

It's a bug. Lazy parameters generate delegates. nothrow is currently not inferred for those delegates. It should be.

https://issues.dlang.org/show_bug.cgi?id=12647
March 01, 2016
On Tuesday, 1 March 2016 at 13:41:38 UTC, Nemo wrote:
> On Tuesday, 1 March 2016 at 13:35:08 UTC, Andrea Fontana wrote:
>> This very very simple function [1] won't compile.
>> It says that param t is not nothrow. Why? What's wrong with this?
>>
>> http://dpaste.dzfl.pl/bfc382e62711
>
> writeln isn't nothrow so you can't call it from test which is nothrow without a try .. catch.
> The error message is misleading.

You are right about writeln & nothrow but the problem is still there if instead of:

writeln(t);

you write:

t;

(that's a reduced example, in real code I don't use writeln or other non-nothrow functions)