On Wednesday, 8 February 2017 at 07:57:15 UTC, Timon Gehr wrote:
On 07.02.2017 22:59, Nick Sabalausky wrote:
Suppose I have some code that operates on a variable's value
and its
UDAs. And I want to refactor that code into a reusable
function. Sounds
simple enough, right?
So, consider a basic example:
----------------------------
class Foo
{
@("Hello")
string s;
}
void doStuff(alias var)()
{
var = "abc";
import std.traits;
assert(hasUDA!(var, "Hello") == true);
}
void main()
{
@("Hello")
string s;
doStuff!(s);
auto foo = new Foo();
// Error: need 'this' for 'doStuff' of type 'pure nothrow
@nogc
@safe void()'
doStuff!(foo.s);
}
----------------------------
Note the error. Naturally, that cannot compile, because you
can't
instantiate a template based on the value of a variable at
runtime (ie,
based on the value of `foo`).
It actually can compile. (It just doesn't.)
There is no essential difference between the two cases.
How much work is it likely to be to make this happen in dmd? I
imagine your frontend can do this already, but that's not a
practical solution even for the medium term.