www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Tuple to tuple conversion

reply "Simen kjaeraas" <simen.kjaras gmail.com> writes:
Sounds stupid, don't it?
123456789012345678901234567890123456789012345678901234567890123456789012
Carrying in my hat my trusty foo, a std.typecons.Tuple!(float), I want
to use it as a parameter to a function taking non-tuple parameters, i.e.
a single float. foo.tupleof gives me an unwieldy conglomerate of
tuple((Tuple!(float))._field_field_0,(Tuple!(float))._0). First, I'm not
sure what all of this means, second I'm completely sure it does not mean
what I want.

foo.field seems much more close to what I want, returning a nice and
clean (float) when I ask for it. However, doing so in the context of
being a function parameter yields other problems, in the form of:

src\phobos\std\typecons.d(424): Error: static assert   
(is(Tuple!(string,float) == Tuple!(string,float))) is false
src\phobos\std\typecons.d(413):        instantiated from here:  
Tuple!(string,float)
src\phobos\std\typecons.d(423):        instantiated from here: slice!(1,3)
problem.d(15):        3 recursive instantiations from here: Tuple!(float)

Especially interesting might be line 424, as that assert ought to be
true in most cases.

I guess what I'm asking for here is, is there a way to do what I want?

-- 
Simen
Jun 07 2010
next sibling parent "Simen kjaeraas" <simen.kjaras gmail.com> writes:
Simen kjaeraas <simen.kjaras gmail.com> wrote:

 I guess what I'm asking for here is, is there a way to do what I want?

Hm, it seems the problem was not where I thought it was. However, this is getting curiouser and curiouser. -- Simen
Jun 07 2010
prev sibling next sibling parent reply "Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> writes:
On Tue, 08 Jun 2010 03:29:05 +0200, Simen kjaeraas wrote:

 Sounds stupid, don't it?
 123456789012345678901234567890123456789012345678901234567890123456789012
 Carrying in my hat my trusty foo, a std.typecons.Tuple!(float), I want
 to use it as a parameter to a function taking non-tuple parameters, i.e.
 a single float. foo.tupleof gives me an unwieldy conglomerate of
 tuple((Tuple!(float))._field_field_0,(Tuple!(float))._0). First, I'm not
 sure what all of this means, second I'm completely sure it does not mean
 what I want.
 
 foo.field seems much more close to what I want, returning a nice and
 clean (float) when I ask for it. However, doing so in the context of
 being a function parameter yields other problems, in the form of:
 
 src\phobos\std\typecons.d(424): Error: static assert
 (is(Tuple!(string,float) == Tuple!(string,float))) is false
 src\phobos\std\typecons.d(413):        instantiated from here:
 Tuple!(string,float)
 src\phobos\std\typecons.d(423):        instantiated from here:
 slice!(1,3) problem.d(15):        3 recursive instantiations from here:
 Tuple!(float)

FWIW, I've run across the same error, while writing code that had nothing to do with tuples. And I've seen others complaining about it too. It seems to be a rather elusive bug in Phobos. -Lars
Jun 07 2010
parent =?UTF-8?B?QWxpIMOHZWhyZWxp?= <acehreli yahoo.com> writes:
Simen kjaeraas wrote:

 "dmd a b -unittest" works. "dmd b a -unittest" does not.

This may explain a problem that I hit recently. I had had all of a program's code in a single file. Then I started pulling classes to their respective source files one by one. As I did that, of course I compiled and run the application to see that everything still worked. At some point, even though all the unittest blocks were commented out, compiling with -unittest would cause a segmentation fault in the built application. The problem went away as I pulled more classes out of the main source file. Ali
Jun 23 2010
prev sibling next sibling parent "Simen kjaeraas" <simen.kjaras gmail.com> writes:
Lars T. Kyllingstad <public kyllingen.nospamnet> wrote:

 FWIW, I've run across the same error, while writing code that had nothing
 to do with tuples.  And I've seen others complaining about it too.  It
 seems to be a rather elusive bug in Phobos.

This has now been tracked down to the importing of std.typecons in two included files. Test case: ////////////////////// module a; import std.typecons; alias Tuple!( float ) foo; ////////////////////// module b; import std.typecons; -- Simen
Jun 08 2010
prev sibling next sibling parent "Simen kjaeraas" <simen.kjaras gmail.com> writes:
Simen kjaeraas <simen.kjaras gmail.com> wrote:

 Lars T. Kyllingstad <public kyllingen.nospamnet> wrote:

 FWIW, I've run across the same error, while writing code that had  
 nothing
 to do with tuples.  And I've seen others complaining about it too.  It
 seems to be a rather elusive bug in Phobos.

This has now been tracked down to the importing of std.typecons in two included files. Test case: ////////////////////// module a; import std.typecons; alias Tuple!( float ) foo; ////////////////////// module b; import std.typecons;

Forgot to mention, this only happens with -unittest. http://d.puremagic.com/issues/show_bug.cgi?id=4294 -- Simen
Jun 08 2010
prev sibling next sibling parent "Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> writes:
On Tue, 08 Jun 2010 12:31:50 +0200, Simen kjaeraas wrote:

 Lars T. Kyllingstad <public kyllingen.nospamnet> wrote:
 
 FWIW, I've run across the same error, while writing code that had
 nothing to do with tuples.  And I've seen others complaining about it
 too.  It seems to be a rather elusive bug in Phobos.

This has now been tracked down to the importing of std.typecons in two included files. Test case: ////////////////////// module a; import std.typecons; alias Tuple!( float ) foo; ////////////////////// module b; import std.typecons;

I'm not sure I understand this. Do you then import a and b into another module to reproduce the error? This doesn't do it for me... Anyway, I was wrong calling this a Phobos bug. It's clearly a DMD bug, since the error message static assert (is(Tuple!(string,float) == Tuple!(string,float))) is false is completely meaningless.
Jun 08 2010
prev sibling next sibling parent "Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> writes:
On Tue, 08 Jun 2010 12:39:43 +0200, Simen kjaeraas wrote:

 Simen kjaeraas <simen.kjaras gmail.com> wrote:
 
 Lars T. Kyllingstad <public kyllingen.nospamnet> wrote:

 FWIW, I've run across the same error, while writing code that had
 nothing
 to do with tuples.  And I've seen others complaining about it too.  It
 seems to be a rather elusive bug in Phobos.

This has now been tracked down to the importing of std.typecons in two included files. Test case: ////////////////////// module a; import std.typecons; alias Tuple!( float ) foo; ////////////////////// module b; import std.typecons;

Forgot to mention, this only happens with -unittest. http://d.puremagic.com/issues/show_bug.cgi?id=4294

That's consistent with my experiences too. It seems to be triggered by a Phobos unittest. Still, I can't reproduce it with your test case. Which DMD version are you using? -Lars
Jun 08 2010
prev sibling next sibling parent "Simen kjaeraas" <simen.kjaras gmail.com> writes:
Lars T. Kyllingstad <public kyllingen.nospamnet> wrote:

 I'm not sure I understand this.  Do you then import a and b into another
 module to reproduce the error?  This doesn't do it for me...

As the bug report says: "dmd -unittest a b" -- Simen
Jun 08 2010
prev sibling next sibling parent "Simen kjaeraas" <simen.kjaras gmail.com> writes:
Lars T. Kyllingstad <public kyllingen.nospamnet> wrote:
 That's consistent with my experiences too.  It seems to be triggered by a
 Phobos unittest.

 Still, I can't reproduce it with your test case.  Which DMD version are
 you using?

2.045. Actually, I can't reproduce it now either. Ah, found the problem. "dmd a b -unittest" works. "dmd b a -unittest" does not. -- Simen
Jun 08 2010
prev sibling next sibling parent "Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> writes:
On Tue, 08 Jun 2010 12:56:04 +0200, Simen kjaeraas wrote:

 Lars T. Kyllingstad <public kyllingen.nospamnet> wrote:
 That's consistent with my experiences too.  It seems to be triggered by
 a Phobos unittest.

 Still, I can't reproduce it with your test case.  Which DMD version are
 you using?

2.045. Actually, I can't reproduce it now either. Ah, found the problem. "dmd a b -unittest" works. "dmd b a -unittest" does not.

Ok, now I can reproduce it too, with 2.046. This just makes it even more clear that it is a DMD bug, not a Phobos one. I've been running into a lot of these order-of-compilation bugs lately. :( -Lars
Jun 08 2010
prev sibling next sibling parent "Masahiro Nakagawa" <repeatedly gmail.com> writes:
On Tue, 08 Jun 2010 19:39:43 +0900, Simen kjaeraas  
<simen.kjaras gmail.com> wrote:

 Simen kjaeraas <simen.kjaras gmail.com> wrote:

 Lars T. Kyllingstad <public kyllingen.nospamnet> wrote:

 FWIW, I've run across the same error, while writing code that had  
 nothing
 to do with tuples.  And I've seen others complaining about it too.  It
 seems to be a rather elusive bug in Phobos.

This has now been tracked down to the importing of std.typecons in two included files. Test case: ////////////////////// module a; import std.typecons; alias Tuple!( float ) foo; ////////////////////// module b; import std.typecons;

Forgot to mention, this only happens with -unittest. http://d.puremagic.com/issues/show_bug.cgi?id=4294

Same issue? http://d.puremagic.com/issues/show_bug.cgi?id=4003
Jun 08 2010
prev sibling parent "Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> writes:
On Tue, 08 Jun 2010 21:10:54 +0900, Masahiro Nakagawa wrote:

 On Tue, 08 Jun 2010 19:39:43 +0900, Simen kjaeraas
 <simen.kjaras gmail.com> wrote:
 
 Simen kjaeraas <simen.kjaras gmail.com> wrote:

 Lars T. Kyllingstad <public kyllingen.nospamnet> wrote:

 FWIW, I've run across the same error, while writing code that had
 nothing
 to do with tuples.  And I've seen others complaining about it too. 
 It seems to be a rather elusive bug in Phobos.

This has now been tracked down to the importing of std.typecons in two included files. Test case: ////////////////////// module a; import std.typecons; alias Tuple!( float ) foo; ////////////////////// module b; import std.typecons;

Forgot to mention, this only happens with -unittest. http://d.puremagic.com/issues/show_bug.cgi?id=4294

http://d.puremagic.com/issues/show_bug.cgi?id=4003

Definitely. Simen's test case is slightly better, though, since it doesn't bring std.stdio into the mix. -Lars
Jun 08 2010