From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3190 invoked by alias); 27 Apr 2003 15:36:01 -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 3147 invoked by uid 71); 27 Apr 2003 15:36:00 -0000 Resent-Date: 27 Apr 2003 15:36:00 -0000 Resent-Message-ID: <20030427153600.3146.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, gianni@mariani.ws Received: (qmail 1647 invoked by uid 48); 27 Apr 2003 15:31:39 -0000 Message-Id: <20030427153139.1646.qmail@sources.redhat.com> Date: Sun, 27 Apr 2003 15:36:00 -0000 From: gianni@mariani.ws Reply-To: gianni@mariani.ws To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/10514: incorrect parsing of template instatiation with pointer-to-member variables X-SW-Source: 2003-04/txt/msg01211.txt.bz2 List-Id: >Number: 10514 >Category: c++ >Synopsis: incorrect parsing of template instatiation with pointer-to-member variables >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sun Apr 27 15:36:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: gianni@mariani.ws >Release: gcc 3.2.1 >Organization: >Environment: Linux X86 RH 7.2 >Description: The lines in question (see listing below) are: i_1->A::TFUNC_A( m_b1 ); i_1->TFUNC_A( m_b1 ); // compiler trubbell without the A:: it seems like it fails to parse. side notes: Apparently MSVC++ 7.0 and Borland compiles it fine confirmed by Rob Williscroft on news:comp.lang.c++ MSVC++ 6.0sp5 dumps an internal compiler error. On the code below GCC 3.2.1 gives the following message: g++ tt2.cpp -o tt2 tt2.cpp: In member function `void Zoo::B::TFUNC_B(Zoo::A*) [with Zoo::A*Zoo::A::*w_a = &Zoo::A::m_mem1, Zoo::A*Zoo::B::*w_b = &Zoo::B::m_b1]': tt2.cpp:68: instantiated from here tt2.cpp:54: invalid use of member (did you forget the `&' ?) tt2.cpp:54: comparison between distinct pointer types `Zoo::A*Zoo::B::*' and ` Zoo::A*' lacks a cast make: *** [tt2] Error 1 class Zoo { public: class B; class A { public: A * m_mem1; A * m_mem2; template < A * A::* w_a, A * B::* w_b > void TFUNC_A( A * i_1 ) { i_1->*w_a = i_1; } typedef void ( A::* F_TA )( A * i_1 ); }; class B { public: A * m_b1; A * m_b2; typedef void ( B::* F_TB )( A * i_1 ); template < A * A::* w_a, A * B::* w_b > void TFUNC_B( A * i_1 ) { static const A::F_TA gg = ( & A::TFUNC_A ); ( i_1->*gg )( m_b1 ); i_1->A::TFUNC_A( m_b1 ); i_1->TFUNC_A( m_b1 ); // compiler trubbel } void Fooey( A * i_1 ) { // static A * A::* const l_mem1 = &A::m_mem1; // static A * B::* const l_b1 = &B::m_b1; // this->TFUNC_B< l_mem1, l_b1 >( i_1 ); // static const F_TB gg = &B::TFUNC_B< l_mem1, l_b1 >; // static const F_TB gg = &B::TFUNC_B< (&A::m_mem1), (&B::m_b1) >; // (this->*gg)( i_1 ); this->TFUNC_B< &A::m_mem1, &B::m_b1 >( i_1 ); } }; }; int main() { Zoo::A a[1]; Zoo::B b[1]; b->Fooey( a ); return 0; } >How-To-Repeat: compile code in description >Fix: >Release-Note: >Audit-Trail: >Unformatted: