From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13054 invoked by alias); 22 Apr 2003 15:09:08 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 13040 invoked from network); 22 Apr 2003 15:09:08 -0000 Received: from unknown (HELO dberlin.org) (69.3.5.6) by sources.redhat.com with SMTP; 22 Apr 2003 15:09:08 -0000 Received: from [192.168.1.31] (account dberlin HELO dberlin.org) by dberlin.org (CommuniGate Pro SMTP 4.1b4) with ESMTP-TLS id 3680088; Tue, 22 Apr 2003 11:09:07 -0400 Date: Tue, 22 Apr 2003 15:09:00 -0000 Subject: Re: [RFA] handling of 'operator' in cp_find_first_component Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v552) Cc: David Carlton , gdb-patches@sources.redhat.com To: Daniel Jacobowitz From: Daniel Berlin In-Reply-To: <20030422032152.GA5033@nevyn.them.org> Message-Id: <5431A3D8-74CF-11D7-A78B-000A95A34564@dberlin.org> Content-Transfer-Encoding: 7bit X-SW-Source: 2003-04/txt/msg00396.txt.bz2 On Monday, April 21, 2003, at 11:21 PM, Daniel Jacobowitz wrote: > > i.e. you can't have a program with > int foo (int) > and > long foo (int) > in it! Stop right here. This is not quite right, since the second example is invalid. You can, however, have (geez i haven't written C++ templates in a while. it took me a few compiles to get this right): template blah foo (int a) { return a; } int main(void) { int q = foo(5); long r = foo(5); } Note the only real difference here is in return type. It also definitely generates two functions: root@dberlin root]# nm -C a.o U __gxx_personality_v0 00000000 T main 00000000 W int foo(int) 00000000 W long foo(int) [root@dberlin root]# There is no way to write exactly what you want in valid C++ (IIRC), so i'm not sure if this program demonstrates what you think can't be done or not. To answer whether you need the return type, let's add two specializations here and make it worse: template <> long foo (int a) { return 9; } template <> int foo (int a) { return 10; } Now, without the return type in the template, you would *never* know which function to call from a debugger if someone does p foo(5) (However, i'll note the only case you will know is when someone does something like p a=foo(5), where "a" is a program variable of type int or long). With the return type, you could at least present a useful list to the user and ask. Unless you want the list to have to re-demangle names so it can get the return type out again, or something ugly like that. --Dan