www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 17815] New: Allow casting of AliasSeq


          Issue ID: 17815
           Summary: Allow casting of AliasSeq
           Product: D
           Version: D2
          Hardware: x86
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: simen.kjaras gmail.com

The following code does not currently compile:

    import std.meta : AliasSeq;
    AliasSeq!(int, float) a;
    auto b = cast(AliasSeq!(byte, byte))a;

Casting a set of values to a set of types is something that comes up every now
and then. It can currently be done using a variation of this function:

    template castTuple(T...) {
        auto castTuple(Args...)(Args args) if (Args.length == T.length) {
            static if (T.length == 0) {
                return tuple();
            } else {
                auto result = .castTuple!(T[1..$])(args[1..$]);
                return tuple(cast(T[0])args[0], result.expand);

The compiler however, has all the necessary information to make the first
example compile.

Sep 07 2017