This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


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

curried template inaccurate names


uname -a
Linux localhost.localdomain 2.2.13-4mdk #1 Tue Sep 7 18:23:11 CEST 1999
i586 unknown
g++ -v
Reading specs from
/home/evansl/prog_dev/gcc_all/gcc-2.96/snap-20000626/lib/gcc-lib/i586-pc-linux/2.96/specs

gcc version 2.96 20000626 (experimental)
-------------------
g++ -c bug.cpp 2>&1 | c++filt
/tmp/ccsHxIB3.s: Assembler messages:
/tmp/ccsHxIB3.s:63: Fatal error: Symbol B<template <class> class
C>::C<int>::C(void) already defined.
-------------------
cat bug.cpp
template
  < typename S
  , template<typename S>class T
  >
  struct
P
  { P(void)
      : m_s(0)
      {}
      T<S>*
    m_s
      ;
  };
template
  < typename S
  >
  struct
A
  { S m_s;
    A(void){}
  };
template
  < template<typename S>class T
  >
  struct
B
  {
    template
      < typename U
      >
      struct
    C
      : public P<U,T>
      {
      };
  };
typedef B<A> B1;
typedef B<B1::C> B2;
typedef B<B2::C> B3;
  int
main(void)
  {
  ; B2::C<int> c2
  ; B3::C<int> c3
  ; return 0
  ;}
-------------------
The name in the error message:
  B<template <class> class C>::C<int>::C(void)
suggests the compiler is not generating accurate names from the
template instantiations.  The above name should be either:

    B2::C<int>::C(void)
  = B<B1::C>::C<int>::C(void)
  = B<B<B<A>::C>::C>::C<int>::C(void)

    B3::C<int>::C(void)
  = B<B2::C>::C<int>::C(void)
  = B<B<B<B<A>::C>::C>::C>::C<int>::C(void)




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