digitalmars.D.bugs - [Issue 19934] New: template function inference breaks when taking
- d-bugmail puremagic.com (53/53) Jun 01 2019 https://issues.dlang.org/show_bug.cgi?id=19934
https://issues.dlang.org/show_bug.cgi?id=19934 Issue ID: 19934 Summary: template function inference breaks when taking the address of the function inside the template Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: johnnymarler gmail.com Reproduce issue with: ``` void func()() { pragma(msg, typeof(&func!()).stringof); } void main() nogc { auto funcPtr = &func!(); funcPtr(); } ``` This fails with: Error: ` nogc` function `D main` cannot call non- nogc function pointer `funcPtr` Normally `func` would be nogc here, but when DMD is forced to resolve typeof(&func!()) while analyzing func, it causes an issue template inference. Note that this issue occurs for all function attributes such as `pure` and `nothrow`. Note that any of the following modifications will fix the issue: 1. remove the pragma, if dmd doesn't have to resolve typeof(&func) inside of func then attribute inference still works correctly 2. don't use auto for funcPtr, i.e. void main() nogc { void function() nogc funcPtr = &func!(); funcPtr(); } 3. call the function pointer without assigning it to a variable: void main() nogc { (&func!())(); } 3. call func directly instead of through a function pointer: void main() nogc { func!()(); } --
Jun 01 2019