[Issue 16364] New: getUDAs and hasUDA do not give consistent results
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Mon Aug 8 02:35:19 PDT 2016
https://issues.dlang.org/show_bug.cgi?id=16364
Issue ID: 16364
Summary: getUDAs and hasUDA do not give consistent results
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: enhancement
Priority: P1
Component: phobos
Assignee: nobody at puremagic.com
Reporter: issues.dlang at jmdavisProg.com
Take this code
import std.traits;
void main()
{
struct AttrT(T)
{
string name;
T value;
}
@AttrT!int("Answer", 42) int a;
static assert(getUDAs!(a, AttrT).length == 1);
static assert(getUDAs!(a, AttrT!int).length == 1);
//static assert(hasUDA!(a, AttrT));
static assert(hasUDA!(a, AttrT!int));
@("alpha") int b;
//static assert(getUDAs!(b, "alpha").length == 1);
static assert(hasUDA!(b, "alpha"));
}
If either of the commented lines are uncommented, you get a compiler error.
getUDAs is able to handle checking for UDAs which are templates without
checking for a specific instantiation, whereas hasUDA is not, and hasUDA is
able to check for UDAs that are values, wherea getUDAs cannot.
It seems to me that the thing to do would be to make getUDAs handle all of the
cases appropriately and then just make hasUDA use getUDAs. It would mean less
code duplication and ensure that they the behave the same.
--
More information about the Digitalmars-d-bugs
mailing list