[Issue 17576] New: mixin template cannot define alias
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Thu Jun 29 17:20:12 PDT 2017
https://issues.dlang.org/show_bug.cgi?id=17576
Issue ID: 17576
Summary: mixin template cannot define alias
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: qs.il.paperinik at gmail.com
mixin template Test(alias f)
{
import std.traits : ReturnType;
alias R = ReturnType!f;
R foo() { }
}
struct S
{
void foo(int) { }
mixin Test!foo T;
alias foo = T.foo;
}
gives me the error message "template instance std.traits.ReturnType!(foo) is
used as a type"
However, when R foo() { } is replaced with ReturnType!f foo() { } the error
message is "isCallable!(foo) is not an expression", and if one deletes the
alias for R, the error disappears.
Instead, if I precede the mixin template with "import std.traits : isCallable;"
and constrain it with "if (isCallable!f)", the error is "no property 'foo' for
type 'void'" essentially because it cannot instance isCallable!f for whatever
reason.
I suspect it is a bug in DMD. It could be in Phobos's ReturnType or isCallable.
--
More information about the Digitalmars-d-bugs
mailing list