use of typeof to determine auto type with ndslice examples

lobo via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Dec 20 20:37:03 PST 2015


On Monday, 21 December 2015 at 04:20:16 UTC, Jay Norwood wrote:
> I pulled down the std.experimental.ndslice examples and am 
> attempting to build some of the examples and understand the 
> types being used.
>
> I know don't need all these imports, but it is hard to guess 
> which ones are needed, and the examples often don't provide 
> them, which I suspect is a common gripe here.
>
> Anyway, I was expecting to be able to use the typeof pragma to 
> print a type that could use as a fully specified type, and that 
> doesn't seem to be the case.  I get a compile error instead.
>
> DMD32 D Compiler v2.069.2 on win32, "dip80-ndslice": "~>0.8.4"
>
> Is there some other way to get a valid fully specified type for 
> these sliced auto variables?
>
> import std.stdio;
> import std.experimental.ndslice;
>
> void main() {
>     import std.algorithm.iteration: map;
>     import std.array: array;
>     import std.range;
>     import std.traits;
>     auto t0 = 1000.iota.sliced(3, 4, 5);
>
>     pragma(msg, typeof(t0));
>     Slice!(3u, Result) = 1000.iota.sliced(3, 4, 5);
>
> Slice!(3u, Result)
> src\app.d(12,2): Error: undefined identifier 'Result'
> dmd failed with exit code 1.

No way that I know of. I've had this before with iota and its 
various forms. I have done this in the past:
(or something similar, I haven't got my code handy ATM)

---
alias RESULT = typeof(iota(1, 2, 3));
...
Slice!(3u, RESULT) = 1000.iota.sliced(3, 4, 5);
---

Note that iota(1) and iota(1, 2, 3) return different types so you 
would require two different RESULT aliases.

bye,
lobo





More information about the Digitalmars-d-learn mailing list