[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#570265: g++-4.4: [4.4/4.5 regression] Rejects template with const static data member used in return type



Package: g++-4.4
Version: 4.4.2-9
Severity: normal

I did report a regression upstream, which ended up in
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43101 .  As requested in
README.Bugs I'm now reporting it here.

The following valid code is accepted by g++-4.3 but rejected by g++-4.4:
======================================================================
template <int dim> class X {};

template <class T> class Y {
    static const unsigned int dim = 1;
    X<Y<T>::dim> f();
};

template <class T>
X<Y<T>::dim> Y<T>::f() { return X<dim>(); }
======================================================================

There is a workaround, but it is quite difficult to find since several
variants don't work due to the ancient bug
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26261 .  The workaround is to
make a typedef for the return type and use that:
======================================================================
template <int dim> class X {};

template <class T> class Y {
  static const unsigned int dim = 1;
  typedef X<dim> Z;
  Z f();
};

template <class T>
typename Y<T>::Z Y<T>::f() { return X<dim>(); }
======================================================================

Thanks,
Jö.

-- System Information:
Debian Release: squeeze/sid
  APT prefers testing-proposed-updates
  APT policy: (500, 'testing-proposed-updates'), (500, 'testing')
Architecture: i386 (x86_64)

Kernel: Linux 2.6.32-trunk-amd64 (SMP w/2 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages g++-4.4 depends on:
ii  gcc-4.4                   4.4.2-9        The GNU C compiler
ii  gcc-4.4-base              4.4.2-9        The GNU Compiler Collection (base 
ii  libc6                     2.10.2-2       GNU C Library: Shared libraries
ii  libgmp3c2                 2:4.3.2+dfsg-1 Multiprecision arithmetic library
ii  libmpfr1ldbl              2.4.2-3        multiple precision floating-point 
ii  libstdc++6-4.4-dev        4.4.2-9        The GNU Standard C++ Library v3 (d

g++-4.4 recommends no packages.

Versions of packages g++-4.4 suggests:
ii  g++-4.4-multilib              4.4.2-9    The GNU C++ compiler (multilib fil
pn  gcc-4.4-doc                   <none>     (no description available)
pn  libstdc++6-4.4-dbg            <none>     (no description available)

-- no debconf information

-- 
oil -- operation iraqi liberation
http://www.mo.tecsamples.de/mahnwache/index.html

Attachment: signature.asc
Description: Digital signature


Reply to: