> -----Original Message----- > From: Eric Lemings [mailto:[EMAIL PROTECTED] > Sent: Wednesday, July 09, 2008 12:40 PM > To: dev@stdcxx.apache.org > Subject: RE: svn commit: r675044 - in /stdcxx/branches/4.3.x: > include/rw/_tuple.h include/tuple > tests/utilities/20.tuple.cnstr.cpp > tests/utilities/20.tuple.creation.cpp > tests/utilities/20.tuple.h tests/utilities/20.tuple.helpers.cpp > > ... > > > > As I see it, the tuple implementation is required to hold a > copy of an > > object of the specified type (const char* in this case). If > you don't > > verify the value held is indeed a copy, you are not > actually verifying > > the requirements. This is wrong, and wrong is much worse > than bad. :) > > Question: > > const char* s1 = "string"; > const char* s2 = "string"; > // s1 guaranteed to equal s2?
With the following change: Index: /work/stdcxx/branches/4.3.x/tests/utilities/20.tuple.cnstr.cpp =================================================================== --- /work/stdcxx/branches/4.3.x/tests/utilities/20.tuple.cnstr.cpp (revision 675050) +++ /work/stdcxx/branches/4.3.x/tests/utilities/20.tuple.cnstr.cpp (working copy) @@ -74,18 +73,20 @@ #define LONG_VALUE INT_VALUE -#define STRING_VALUE "string" +#define STRING_VALUE str_value +static const char* str_value = "string"; + static void verify_tuple (const PairTuple& pt) { rw_assert (std::get<0> (pt) == LONG_VALUE, __FILE__, __LINE__, "std::get<0> (pt), got %d, expected %d", std::get<0> (pt), LONG_VALUE); - rw_assert (0 == std::strcmp (std::get<1> (pt), STRING_VALUE), - __FILE__, __LINE__, - "std::get<1> (pt), got %s, expected %s", - std::get<1> (pt), STRING_VALUE); + rw_assert (std::get<1> (pt) == STRING_VALUE, __FILE__, __LINE__, + "std::get<1> (pt), got %p \"%s\", expected %p \"%s\"", + std::get<1> (pt), std::get<1> (pt), + STRING_VALUE, STRING_VALUE); } I get the following assertions: ... # ASSERTION (S7) (5 lines): # TEXT: std::get<1> (pt), got 000000000f18d8c0 "string", expected 000000000042796e "string" # CLAUSE: [tuple.cnstr] # FILE: 20.tuple.cnstr.cpp # LINE: 86 # INFO (S1) (5 lines): # TEXT: move constructor (heterogenous tuples) # CLAUSE: [tuple.cnstr] # FILE: 20.tuple.cnstr.cpp # LINE: 458 # ASSERTION (S7) (5 lines): # TEXT: std::get<1> (pt), got 000000000f18d8c0 "string", expected 000000000042796e "string" # CLAUSE: [tuple.cnstr] # FILE: 20.tuple.cnstr.cpp # LINE: 86 # INFO (S1) (5 lines): # TEXT: copy assignment operator (heterogenous tuples) # CLAUSE: [tuple.cnstr] # FILE: 20.tuple.cnstr.cpp # LINE: 480 # ASSERTION (S7) (5 lines): # TEXT: std::get<1> (pt), got 000000000f18d8c0 "string", expected 000000000042796e "string" # CLAUSE: [tuple.cnstr] # FILE: 20.tuple.cnstr.cpp # LINE: 86 # INFO (S1) (5 lines): # TEXT: move assignment operator (heterogenous tuples) # CLAUSE: [tuple.cnstr] # FILE: 20.tuple.cnstr.cpp # LINE: 504 # ASSERTION (S7) (5 lines): # TEXT: std::get<1> (pt), got 000000000f18d8c0 "string", expected 000000000042796e "string" # CLAUSE: [tuple.cnstr] # FILE: 20.tuple.cnstr.cpp # LINE: 86 ... It appears that pointer values are not guaranteed to be equal when converting between pointer types. Brad.