On 09/20/2017 06:55 PM, Steven Schveighoffer wrote:
On 9/20/17 11:48 AM, Dgame wrote:
[...]
----
Unqual!T[n] s(T, size_t n)(T[n] arr)
{
     return arr;
}

auto a = "hallo".s;
writeln(typeof(a).stringof); // char[5]
----
[...]
Still it can't handle the case of:

ubyte[3] x = [1, 2, 3];

Making the parameter variadic seems to do the trick:

----
import std.traits: Unqual;

Unqual!T[n] s(T, size_t n)(T[n] arr ...)
{
     return arr[];
        /* With indirections, dmd would complain about an
        escaping reference. Slicing shuts it up. */
}

void main()
{
    auto a = s("hello");
    static assert(is(typeof(a) == char[5]));

    auto x = s!ubyte(1, 2, 3);
    static assert(is(typeof(x) == ubyte[3]));

    auto y = s(new int, new int);
    static assert(is(typeof(y) == int*[2]));

    auto z = s(new immutable int, new immutable int);
    static assert(is(typeof(z) == immutable(int)*[2]));
}
----

Reply via email to