On Wednesday, 31 August 2016 at 19:39:36 UTC, ag0aep6g wrote:
On 08/31/2016 09:23 PM, Yuxuan Shui wrote:
Correct me if I'm wrong. But I believe this is only true when
the source
code of function is not available. Otherwise the compiler
should always
know if a function is actually @nogc or not.
Attributes are only inferred in certain cases where the source
code must be available anyway (templates, `auto` return value).
For ordinary functions, the compiler only considers them @nogc
when they're explicitly marked.
For example, the compiler won't let you do this, even though
f's source code is available and it's obviously de-facto @nogc:
----
void f() {}
void main() @nogc { f(); }
----
That's a good point. By IMHO, all the (non-template) function in
Phobos that can be marked @nogc, should be marked @nogc,
otherwise it's a bug. If the function is in your own code, you
should use @nogc, not assumeNogc.
After a second thought, the real use case of assumeNogc is
probably virtual functions. But then again, it is kind of
dangerous to use it even in this case.