[Issue 15634] new __traits request: isLvalue
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Jun 13 12:07:56 UTC 2020
https://issues.dlang.org/show_bug.cgi?id=15634
Stanislav Blinov <stanislav.blinov at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |stanislav.blinov at gmail.com
--- Comment #1 from Stanislav Blinov <stanislav.blinov at gmail.com> ---
Stumbled on this via a forum thread (four years later, yay), and honestly I
find this request rather strange.
There is a trait that provides such information for functions - the
getFunctionAttributes. It already existed at the time of this issue report, and
is even touched upon in aforementioned forum thread, albeit in Phobos disguise.
However, the "some alias/member" may be (among others):
- an overloaded function
- a function template with auto ref parameters
In both of those cases, a __trait won't be able to provide the information
required, since symbol alone is simply insufficient. Overloads would need to be
tested one by one, carefully matching arguments; templates would have to be
instantiated, again carefully matching arguments. Consider:
struct S
{
string x;
// NOTE: y is overloaded
void y() {}
ref y(return ref int z) { return z; }
float y(float z) { return z; }
// whether it returns rvalue or lvalue depends on what is passed
auto ref tpl(Args...)(auto ref Args args) {
static if (args.length)
return args[0];
}
}
static assert(__traits(hypotheticalIsLvalue, S.y)); // which `y` ???
static assert(__traits(hypotheticalIsLvalue, S.tpl)); // ???
--
More information about the Digitalmars-d-bugs
mailing list