From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22983 invoked by alias); 23 Apr 2003 23:56:00 -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 22963 invoked by uid 71); 23 Apr 2003 23:56:00 -0000 Resent-Date: 23 Apr 2003 23:56:00 -0000 Resent-Message-ID: <20030423235600.22961.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, dv@vollmann.ch Received: (qmail 14387 invoked from network); 23 Apr 2003 23:46:06 -0000 Received: from unknown (HELO paysurfmail.sunrise.ch) (194.230.0.20) by sources.redhat.com with SMTP; 23 Apr 2003 23:46:06 -0000 Received: from vollmann.ch (212.98.43.140) by paysurfmail.sunrise.ch (6.0.055) id 3E4370F6001437AE for gcc-gnats@gcc.gnu.org; Thu, 24 Apr 2003 01:46:05 +0200 Received: (from dv@localhost) by vollmann.ch (8.9.3/8.9.3) id BAA29081; Thu, 24 Apr 2003 01:44:21 +0200 Message-Id: <200304232344.BAA29081@vollmann.ch> Date: Wed, 23 Apr 2003 23:56:00 -0000 From: dv@vollmann.ch To: gcc-gnats@gcc.gnu.org Cc: dv@vollmann.ch X-Send-Pr-Version: 3.113 Subject: c++/10473: conversion operator from private base used X-SW-Source: 2003-04/txt/msg01006.txt.bz2 List-Id: >Number: 10473 >Category: c++ >Synopsis: g++ wrongly considers conversion operator from private base >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: rejects-legal >Submitter-Id: net >Arrival-Date: Wed Apr 23 23:56:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Detlef Vollmann >Release: 3.4 20030423 (experimental) >Organization: vollmann engineering gmbh >Environment: System: Linux dwarf 2.4.3-XFS #7 Mon Aug 6 18:43:20 CEST 2001 i686 unknown Architecture: i686 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: /pdsrc/gcc/cvs/gcc/configure --program-suffix=-test --prefix=/local/gcc-test --enable-shared --enable-threads=posix --enable-version-specific-runtime-libs --enable-languages=c,c++ >Description: If a class defines an operator[] and a private base class defines a conversion operator to a pointer, the use of the operator[] can cause ambiguities. This would be correct if the derivation would be public, but is wrong if the derivation is private. >How-To-Repeat: See attached file: inherit-conv.cc: typedef unsigned int size_t; class Base { public: typedef int *value_type; Base() {} operator value_type() const { return 0; } void operator=(value_type val) {} }; class Derived : private Base { public: Derived() : p(0) {} Base::value_type &operator[](size_t index) { return p; } private: Base::value_type p; }; int main() { Derived ppBuf; int *p = ppBuf[4]; ppBuf[0] = p; return 0; } >Fix: >Release-Note: >Audit-Trail: >Unformatted: