[Issue 19934] New: template function inference breaks when taking the address of the function inside the template
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Jun 2 05:31:50 UTC 2019
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 at puremagic.com
Reporter: johnnymarler at 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- at 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!()();
}
--
More information about the Digitalmars-d-bugs
mailing list