This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/20475] static_cast falsely allows const to be cast away
- From: "gdr at integrable-solutions dot net" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 16 May 2005 02:54:27 -0000
- Subject: [Bug c++/20475] static_cast falsely allows const to be cast away
- References: <20050314190251.20475.dcb314@hotmail.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From gdr at integrable-solutions dot net 2005-05-16 02:54 -------
Subject: Re: static_cast falsely allows const to be cast away
"schlie at comcast dot net" <gcc-bugzilla@gcc.gnu.org> writes:
| ------- Additional Comments From schlie at comcast dot net 2005-05-16 02:44 -------
| (In reply to comment #5)
| > Subject: Re: static_cast falsely allows const to be cast away
| > | > Yup, string literal should have type 'const char *'.
| > |
| > | I believe 'static const char []' would seem most correct?
| >
| > "static" is not part of the type. The ty[e of a string literal is
| > "const char[N]", N being its sizeof. There is no if no but.
| > Similar rule for wide string literal.
|
| Then maybe GCC needs to broaden it's view of what information
| needs to be considered a type qualifier at least internally; as a
| storage specification can certainly restrict an object's permissible
| use and access, as such should be recorded and maintained as a
| qualifier for all objects, and pointers/references.
That is your view. However, not because GCC implements the ISO C++
view of types, means that GCC has a narrow view of a type is. I
suspect that part of your speculation is based on unfamiliarity with
both the C++ type system and the GCC internal notion of types.
| A literal string is not simply a 'const char [N]' object, as a
| literal value may not be specified as a target of an assignment,
| directly or indirectly though a pointer cast to a non-const object
| reference, unlike as a plain old 'const' objects may be.
But, a plain old 'const' object cannot be a target of an assignment.
There is no different there -- and certainly "static" does not imply a
difference there -- so the basis of your argument seems fragile to
begin with.
-- Gaby
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20475