This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Foo<int,(char*)&string>


Here's a test program, derived from gdb.cp/templates.cc:

  #include <iostream>
  #include <string.h>

  template <class T, char * name>
  class Foo
  {
    public:
      int method ();
  };

  template <class T, char * name> int Foo<T, name>::method ()
  {
    return strlen (name);
  }

  char string [10] = "hello";

  int main ()
  {
    Foo <int, string> f1;
    std::cout << f1.method () << std::endl;
    return 0;
  }

The second template parameter is a "char *"; a value, not a type.

gcc 3.3.2 -gstabs+ emits this:

  .stabs "Foo<int,&string>:Tt(1,1)=..."

gcc HEAD -gstabs+ just changed to emit this:

  .stabs "Foo<int,(char*)(&string)>:Tt(0,25)=..."

Do we care?  I think the "(char*)(&string)" looks ugly but is legal.
I want to change templates.exp to accept this as a PASS.  I've found
enough serious stabs+ bugs with gcc that I don't want to make a fuss
over this difference.

What do you think?

Michael C


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]