[Issue 20275] New: Tuple created in template in with() includes with-symbol
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Oct 7 08:20:55 UTC 2019
https://issues.dlang.org/show_bug.cgi?id=20275
Issue ID: 20275
Summary: Tuple created in template in with() includes
with-symbol
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: minor
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: default_357-line at yahoo.de
Consider this code:
enum E { A }
alias AliasSeq(T...) = T;
alias EnumMembers(T) = AliasSeq!(__traits(allMembers, T));
void main()
{
pragma(msg, EnumMembers!E.stringof);
with (S())
{
pragma(msg, EnumMembers!E.stringof);
auto members = [EnumMembers!E];
}
}
struct S
{
alias EnumMembers = .EnumMembers;
}
run.dlang.io: https://run.dlang.io/is/VwW2Zw
When run, it is seen that the `EnumMembers` aliased in the struct references
the with-symbol:
tuple("A")
(*__withSym).tuple("A")
onlineapp.d(12): Error: expression has no value
This is despite the fact that none of the members of the tuple reference the
struct, are looked up in the struct, or have anything to do with the struct.
Also the tuple isn't formed in the lexical context of the with() statement. As
a result, the attempt to form an array of enum members fails with a cryptic
error.
--
More information about the Digitalmars-d-bugs
mailing list