DIP-1000 and return

Stefan Koch via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jan 1 10:00:54 PST 2017


On Sunday, 1 January 2017 at 17:41:46 UTC, Nordlöw wrote:
> The code
>
>
> auto asStatic(T, size_t length)(T[length] arr)
> {
>     return arr;
> }
>
> @safe pure nothrow @nogc unittest
> {
>     auto x = [1, 2, 3].asStatic;
>     static assert(is(typeof(x) == int[x.length]));
>     static assert(is(typeof([1, 2, 3].asStatic) == 
> int[x.length]));
> }
>
>
> now fails on Git master (after DIP-1000 has been merged) as
>
>
> array_ex.d(55,6): Error: parameter arr is 'return' but function 
> does not return any indirections
> array_ex.d(63,23): Error: template instance 
> array_ex.asStatic!(int, 3LU) error instantiating
> array_ex.d(64,5): Error: static assert  (is(typeof(x) == 
> int[x.length])) is false
>
>
> I tried qualifying argument with `return ref` as described at
>
> https://wiki.dlang.org/DIP25
>
> but that fails because parameter must be allowed to be an 
> r-value aswell.
>
> Any clues?


Try:
  auto asStatic(T, size_t length)(scope T[length] arr)
  {
      return arr;
  }


More information about the Digitalmars-d-learn mailing list