Better string representation for TypeSeq used as function arg type?

cym13 via Digitalmars-d digitalmars-d at puremagic.com
Sat Dec 12 03:19:20 PST 2015


On Saturday, 12 December 2015 at 11:00:17 UTC, Shriramana Sharma 
wrote:
> Hello. By executing the following:
>
> alias AS = AliasSeq!(int, double);
> int foo(AS td)  // same as int foo(int, double);
> {
>     writeln(typeof(td).stringof);
>     return td[0] + cast(int)td[1];
> }
>
> I get:
>
> (int, double)
>
> But it is not very clear as to what exactly the type of `td` 
> is! I understand that the AliasSeq is presented to the function 
> body *as if* it were a Tuple!(int, double) in that it can be 
> accessed using [0] [1] etc, but it is not *really* (in the 
> sense of RTTI) a Tuple, is it? In which case, what is it? Is it 
> another "Voldemort" type?

An AliasSeq is a sequence of types that exist only at 
compile-time, hence I see two possible answers to your question. 
The first is that it is what you told it to be: a sequence of two 
elements, first int then double. From the compiler point of view 
that's what it is. If you look from a runtime point of view 
though there is no one type for td: it's only a game of symbols 
and as td by itself doesn't even have a size one could argue that 
it doesn't have a type at all. That's because it doesn't exist at 
all at runtime (there is only int and double).

So, no, it's not a Voldemort type, it's exactly what the compiler 
tells you it is: the sequence of types (int, double).


More information about the Digitalmars-d mailing list