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.

Reply via email to