www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 12530] New: uniform initialization for type tuples too

reply d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=12530

           Summary: uniform initialization for type tuples too
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: monarchdodra gmail.com


--- Comment #0 from monarchdodra gmail.com 2014-04-06 12:14:28 PDT ---
Not sure if enhancement request or bug, but filing as EH.

I think these should work:

//----
    auto a = TypeTuple!(int, int, int)(); //(0, 0, 0)
    auto b = TypeTuple!(int, int, int)(1); //(1, 1, 1)
    //auto c = TypeTuple!(int, int, int)(1, 2); //Should fail
    auto d = TypeTuple!(int, int, int)(1, 2, 3); //(1, 2, 3)
//----

Currently they all produce:
Error: function expected before (), not (int, int, int) of type (int, int, int)

In particular, I think this should work:
//----
    TypeTuple!(int, int, int) a = ...;
    TypeTuple!(int, int, int) b = TypeTuple!(int, int, int)(a);
//----
Though arguably, it's the exactly the same as the "d" case above.

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 06 2014
next sibling parent d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=12530


bearophile_hugs eml.cc changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bearophile_hugs eml.cc


--- Comment #1 from bearophile_hugs eml.cc 2014-04-06 12:32:55 PDT ---
(In reply to comment #0)

 I think these should work:
 
     auto a = TypeTuple!(int, int, int)(); //(0, 0, 0)
     auto b = TypeTuple!(int, int, int)(1); //(1, 1, 1)
     //auto c = TypeTuple!(int, int, int)(1, 2); //Should fail
     auto d = TypeTuple!(int, int, int)(1, 2, 3); //(1, 2, 3)

Please show one or more use cases. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 06 2014
prev sibling parent d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=12530



--- Comment #2 from monarchdodra gmail.com 2014-04-06 13:02:13 PDT ---
(In reply to comment #1)
 Please show one or more use cases.

I've had need of this, for example, to transform the types of variadic arguments, before passing them to another function. "reduce" or "uninitializedArray" come to mind: //---- void main() { uninitialized!(int[][])(1, 2); } alias ToSizeT(T) = size_t; enum IsSizeT(T) = is(S == size_t); auto uninitialized(T, Args...)(Args args) { //transform the "int" inference to "size_t" alias SizeTArgs = staticMap!(ToSizeT, Args); //Call with the same arguments, but cast to size_t... //if the cast is implicitly safe return impl!T(SizeTArgs(args)); } auto impl(T, Args...)(Args args) //Avoid bloat by requesting size_t args. { static assert(allSatisfy!(IsSizeT, Args)); } //---- The same design can be used to transform/forward args, say to unqualify all of them at once: //---- void myFun(Args(Args args)) { alias UArgs = staticMap!(Unqual, Args); static if (!is(UArgs == ARgs)) myFun(UArgs(args)); else { //actual implementation here } } Or, in the case of reduce, to build the different seeds from front: auto result = tuple(SeedTypes(r.front)); -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 06 2014