Bug 20389 – __traits(isDisabled) with invalid template function

Status
NEW
Severity
enhancement
Priority
P4
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2019-11-13T17:24:41Z
Last change time
2024-12-13T19:06:11Z
Assigned to
No Owner
Creator
John Hall
Moved to GitHub: dmd#19640 →

Comments

Comment #0 by john.michael.hall — 2019-11-13T17:24:41Z
If you @disable a templated function that is not valid and then try to call __traits(isDisabled) on it with the template instantiated with something other than a type, then you will get a message that the template instance does not match the declaration. However, it does not tell you why. For instance, in the code below, T should also be part of the template, but you can only find that out if you actually call foo. @disable T[] foo(U)(T[] x, T rhs) { return x ~ rhs; } unittest { static assert(__traits(isDisabled, foo!"~")); } I would reiterate that this seems to be related to using something other than a type in the instantiation. If I try the code below, then it tells me that T is an undefined identifier. unittest { static assert(__traits(isDisabled, foo!(int))); }
Comment #1 by john.michael.hall — 2019-11-13T18:10:52Z
It seems that this is related to not having a module defined... When I add something like module A; to the top and then static assert(__traits(isDisabled, A.foo)); compiles without error when U is there and if U is removed then it gives the error that T is not defined.
Comment #2 by robert.schadek — 2024-12-13T19:06:11Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/19640 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB