Eric Lemings wrote:
-----Original Message-----
From: Travis Vitek [mailto:[EMAIL PROTECTED]
Sent: Wednesday, July 09, 2008 12:28 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
Eric Lemings wrote:
Travis Vitek wrote:
Modified:
stdcxx/branches/4.3.x/tests/utilities/20.tuple.creation.cpp
...
+ rw_assert (0 == std::strcmp (s, "string"), __FILE__,
__LINE__,
+ "s == \"string\", got false, expected true");
The tuple is holding the original pointer (not a copy), so I
think you
can check the actual pointer here.
True. But if that assumption became invalid for whatever reason, the
code above would still work.
Assumptions are bad. Robustness is good. :)
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?
It's unspecified. The compiler is allowed to merge strings.
It's allowed to even go as far as to point s2 at (s1 + 1)
in the snippet below:
const char* s1 = "Xstring";
const char* s2 = "string";
Martin