View mode: basic / threaded / horizontal-split · Log in · Help
January 26, 2012
TypeTuple of functions
I'm asking questions all the time :-)

I have just closed this bug report as fixed:
http://d.puremagic.com/issues/show_bug.cgi?id=5695

Using that idiom I've seen a difference:


template TypeTuple(TList...) {
   alias TList TypeTuple;
}

double f1(in double x) pure nothrow { return x; }
alias TypeTuple!(f1) funcs1;

alias TypeTuple!(function(in double x) pure nothrow { return x; }) funcs2;

void main() {
   pragma(msg, typeid(typeof(funcs1[0])).stringof); // &D18TypeInfo_FNaNbxdZd6__initZ
   pragma(msg, typeid(typeof(funcs2[0])).stringof); // &D22TypeInfo_PFNaNbNfxdZxd6__initZ
}


Do you know what's the difference between those two functions? (I am not able to read mangled names).

Bye and thank you,
bearophile
January 26, 2012
Re: TypeTuple of functions
On Thu, Jan 26, 2012 at 01:32:35PM -0500, bearophile wrote:
[...]
> template TypeTuple(TList...) {
>     alias TList TypeTuple;
> }
> 
> double f1(in double x) pure nothrow { return x; }
> alias TypeTuple!(f1) funcs1;
> 
> alias TypeTuple!(function(in double x) pure nothrow { return x; }) funcs2;
> 
> void main() {
>     pragma(msg, typeid(typeof(funcs1[0])).stringof); // &D18TypeInfo_FNaNbxdZd6__initZ
>     pragma(msg, typeid(typeof(funcs2[0])).stringof); // &D22TypeInfo_PFNaNbNfxdZxd6__initZ
> }
> 
> 
> Do you know what's the difference between those two functions? (I am not able to read mangled names).
[...]

You could just use:

	writeln(typeid(typeof(...)));

instead; it gives you readable names. I modified your code and ran it,
and got:

	double()
	const(double)()*


T

-- 
Computers are like a jungle: they have monitor lizards, rams, mice, c-moss, binary trees... and bugs.
January 27, 2012
Re: TypeTuple of functions
Differing part:
FNaNb  xdZ d6
PFNaNbNfxdZxd6

P -> pointer
Nf -> @safe
x -> const

The second one is a function pointer not a function, is inferred to be 
@safe, and inferred to return const(double).


"bearophile" <bearophileHUGS@lycos.com> wrote in message 
news:jfs683$2mqh$1@digitalmars.com...
> I'm asking questions all the time :-)
>
> I have just closed this bug report as fixed:
> http://d.puremagic.com/issues/show_bug.cgi?id=5695
>
> Using that idiom I've seen a difference:
>
>
> template TypeTuple(TList...) {
>    alias TList TypeTuple;
> }
>
> double f1(in double x) pure nothrow { return x; }
> alias TypeTuple!(f1) funcs1;
>
> alias TypeTuple!(function(in double x) pure nothrow { return x; }) funcs2;
>
> void main() {
>    pragma(msg, typeid(typeof(funcs1[0])).stringof); // 
> &D18TypeInfo_FNaNbxdZd6__initZ
>    pragma(msg, typeid(typeof(funcs2[0])).stringof); // 
> &D22TypeInfo_PFNaNbNfxdZxd6__initZ
> }
>
>
> Do you know what's the difference between those two functions? (I am not 
> able to read mangled names).
>
> Bye and thank you,
> bearophile
Top | Discussion index | About this forum | D home