From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27147 invoked by alias); 9 Oct 2002 19:46:03 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 27128 invoked by uid 71); 9 Oct 2002 19:46:02 -0000 Date: Wed, 09 Oct 2002 12:46:00 -0000 Message-ID: <20021009194602.27126.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Andreas Schwab Subject: Re: c++/8176: C++ const**, doesn't implictly cast Reply-To: Andreas Schwab X-SW-Source: 2002-10/txt/msg00335.txt.bz2 List-Id: The following reply was made to PR c++/8176; it has been noted by GNATS. From: Andreas Schwab To: charles@kde.org Cc: gcc-gnats@gcc.gnu.org Subject: Re: c++/8176: C++ const**, doesn't implictly cast Date: Wed, 09 Oct 2002 21:42:03 +0200 charles@kde.org writes: |> class Bleh { }; |> |> void foo(const Bleh **) { } |> int main(int, char **) |> { |> Bleh *bleh; |> foo(&bleh); // broken |> |> Bleh **bar; |> foo(bar); // broken |> |> foo(const_cast(bar)); // works |> |> const Bleh **works; |> foo(works); // works |> } |> |> This should work, as can be casted to implicitly No, you can't. class Bleh { int what; }; const Bleh const_bleh; void foo(const Bleh **bleh) { *bleh = &const_bleh; } int main() { Bleh *bleh; foo(&bleh); // assume this is valid (*bleh)->what = 1; // modifying const_bleh! } Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."