When I try to "emerge mutella", I get a compile error because the syntax is wrong for the templated operators. See actual results below. Reproducible: Always Steps to Reproduce: 1. emerge mutella Actual Results: source='gnuwordhash.cpp' object='gnuwordhash.o' libtool=no \ depfile='.deps/gnuwordhash.Po' tmpdepfile='.deps/gnuwordhash.TPo' \ depmode=gcc3 /bin/sh ../depcomp \ g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include -D_REENTRANT -D_MIT_POSIX_THREADS -fno-exceptions -fno-check-new -fomit-frame-pointer -fpermissive -O0 -c -o gnuwordhash.o `test -f 'gnuwordhash.cpp' || echo './'`gnuwordhash.cpp In file included from mutella.h:83, from gnuwordhash.cpp:29: tstring.h:532: error: declaration of `operator==' as non-function tstring.h:532: error: expected `;' before '<' token tstring.h:533: error: declaration of `operator==' as non-function tstring.h:533: error: expected `;' before '<' token tstring.h:534: error: declaration of `operator==' as non-function tstring.h:534: error: expected `;' before '<' token tstring.h:535: error: declaration of `operator==' as non-function tstring.h:535: error: expected `;' before '<' token tstring.h:536: error: declaration of `operator==' as non-function tstring.h:536: error: expected `;' before '<' token tstring.h:537: error: declaration of `operator!=' as non-function tstring.h:537: error: expected `;' before '<' token tstring.h:538: error: declaration of `operator!=' as non-function tstring.h:538: error: expected `;' before '<' token tstring.h:539: error: declaration of `operator!=' as non-function tstring.h:539: error: expected `;' before '<' token tstring.h:540: error: declaration of `operator!=' as non-function tstring.h:540: error: expected `;' before '<' token tstring.h:541: error: declaration of `operator!=' as non-function tstring.h:541: error: expected `;' before '<' token tstring.h:542: error: declaration of `operator>' as non-function tstring.h:542: error: expected `;' before '<' token tstring.h:543: error: declaration of `operator>' as non-function tstring.h:543: error: expected `;' before '<' token tstring.h:544: error: declaration of `operator>' as non-function tstring.h:544: error: expected `;' before '<' token tstring.h:545: error: declaration of `operator>' as non-function tstring.h:545: error: expected `;' before '<' token tstring.h:546: error: declaration of `operator>' as non-function tstring.h:546: error: expected `;' before '<' token tstring.h:547: error: declaration of `operator<' as non-function tstring.h:547: error: expected `;' before '<' token tstring.h:548: error: declaration of `operator<' as non-function tstring.h:548: error: expected `;' before '<' token tstring.h:549: error: declaration of `operator<' as non-function tstring.h:549: error: expected `;' before '<' token tstring.h:550: error: declaration of `operator<' as non-function tstring.h:550: error: expected `;' before '<' token tstring.h:551: error: declaration of `operator<' as non-function tstring.h:551: error: expected `;' before '<' token tstring.h:552: error: declaration of `operator+' as non-function tstring.h:552: error: expected `;' before '<' token tstring.h:553: error: declaration of `operator+' as non-function tstring.h:553: error: expected `;' before '<' token tstring.h:554: error: declaration of `operator+' as non-function tstring.h:554: error: expected `;' before '<' token tstring.h:555: error: declaration of `operator+' as non-function tstring.h:555: error: expected `;' before '<' token tstring.h:556: error: declaration of `operator+' as non-function tstring.h:556: error: expected `;' before '<' token tstring.h:557: error: declaration of `operator<<' as non-function tstring.h:557: error: expected `;' before '<' token tstring.h:558: error: declaration of `operator>>' as non-function tstring.h:558: error: expected `;' before '<' token tstring.h: In function `bool operator>(T, const TString<T>&)': tstring.h:632: error: `cLhs' undeclared (first use this function) tstring.h:632: error: (Each undeclared identifier is reported only once for each function it appears in.) tstring.h: In function `bool operator<(T, const TString<T>&)': tstring.h:643: error: `cLhs' undeclared (first use this function) tstring.h: In function `TString<T> operator+(const TString<T>&, typename TString<T>::LPCT) [with T = char]': gnuwordhash.cpp:226: instantiated from here tstring.h:517: error: `static int TString<T>::_strlen(const T*) [with T = char]' is protected tstring.h:656: error: within this context gnuwordhash.cpp:226: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:657: error: within this context tstring.h:403: error: `void TString<T>::_reallocNreplace(int, const T*) [with T = char]' is protected tstring.h:657: error: within this context gnuwordhash.cpp:226: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:658: error: within this context tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:658: error: within this context tstring.h:403: error: `void TString<T>::_reallocNreplace(int, const T*) [with T = char]' is protected tstring.h:658: error: within this context gnuwordhash.cpp:226: instantiated from here tstring.h:385: error: `void TString<T>::_reallocNtail(int, const T*) [with T = char]' is protected tstring.h:659: error: within this context tstring.h: In function `bool operator==(const TString<T>&, const TString<T>&) [with T = char]': gnuwordhash.cpp:240: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:563: error: within this context tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:563: error: within this context tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:565: error: within this context tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:565: error: within this context tstring.h:522: error: `static int TString<T>::_strcmp(const T*, const T*) [with T = char]' is protected tstring.h:565: error: within this context tstring.h: In function `TString<T> operator+(typename TString<T>::LPCT, const TString<T>&) [with T = char]': gnuwordhash.cpp:370: instantiated from here tstring.h:517: error: `static int TString<T>::_strlen(const T*) [with T = char]' is protected tstring.h:665: error: within this context gnuwordhash.cpp:370: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:666: error: within this context tstring.h:403: error: `void TString<T>::_reallocNreplace(int, const T*) [with T = char]' is protected tstring.h:666: error: within this context gnuwordhash.cpp:370: instantiated from here tstring.h:403: error: `void TString<T>::_reallocNreplace(int, const T*) [with T = char]' is protected tstring.h:667: error: within this context gnuwordhash.cpp:370: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:668: error: within this context tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:668: error: within this context tstring.h:385: error: `void TString<T>::_reallocNtail(int, const T*) [with T = char]' is protected tstring.h:668: error: within this context tstring.h: In function `TString<T> operator+(const TString<T>&, const TString<T>&) [with T = char]': gnuwordhash.cpp:632: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:648: error: within this context tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:648: error: within this context tstring.h:403: error: `void TString<T>::_reallocNreplace(int, const T*) [with T = char]' is protected tstring.h:648: error: within this context gnuwordhash.cpp:632: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:649: error: within this context tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:649: error: within this context tstring.h:403: error: `void TString<T>::_reallocNreplace(int, const T*) [with T = char]' is protected tstring.h:649: error: within this context gnuwordhash.cpp:632: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:650: error: within this context tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:650: error: within this context tstring.h:385: error: `void TString<T>::_reallocNtail(int, const T*) [with T = char]' is protected tstring.h:650: error: within this context In file included from mutella.h:83, from sha1thread.cpp:25: tstring.h:532: error: declaration of `operator==' as non-function tstring.h:532: error: expected `;' before '<' token tstring.h:533: error: declaration of `operator==' as non-function tstring.h:533: error: expected `;' before '<' token tstring.h:534: error: declaration of `operator==' as non-function tstring.h:534: error: expected `;' before '<' token tstring.h:535: error: declaration of `operator==' as non-function tstring.h:535: error: expected `;' before '<' token tstring.h:536: error: declaration of `operator==' as non-function tstring.h:536: error: expected `;' before '<' token tstring.h:537: error: declaration of `operator!=' as non-function tstring.h:537: error: expected `;' before '<' token tstring.h:538: error: declaration of `operator!=' as non-function tstring.h:538: error: expected `;' before '<' token tstring.h:539: error: declaration of `operator!=' as non-function tstring.h:539: error: expected `;' before '<' token tstring.h:540: error: declaration of `operator!=' as non-function tstring.h:540: error: expected `;' before '<' token tstring.h:541: error: declaration of `operator!=' as non-function tstring.h:541: error: expected `;' before '<' token tstring.h:542: error: declaration of `operator>' as non-function tstring.h:542: error: expected `;' before '<' token tstring.h:543: error: declaration of `operator>' as non-function tstring.h:543: error: expected `;' before '<' token tstring.h:544: error: declaration of `operator>' as non-function tstring.h:544: error: expected `;' before '<' token tstring.h:545: error: declaration of `operator>' as non-function tstring.h:545: error: expected `;' before '<' token tstring.h:546: error: declaration of `operator>' as non-function tstring.h:546: error: expected `;' before '<' token tstring.h:547: error: declaration of `operator<' as non-function tstring.h:547: error: expected `;' before '<' token tstring.h:548: error: declaration of `operator<' as non-function tstring.h:548: error: expected `;' before '<' token tstring.h:549: error: declaration of `operator<' as non-function tstring.h:549: error: expected `;' before '<' token tstring.h:550: error: declaration of `operator<' as non-function tstring.h:550: error: expected `;' before '<' token tstring.h:551: error: declaration of `operator<' as non-function tstring.h:551: error: expected `;' before '<' token tstring.h:552: error: declaration of `operator+' as non-function tstring.h:552: error: expected `;' before '<' token tstring.h:553: error: declaration of `operator+' as non-function tstring.h:553: error: expected `;' before '<' token tstring.h:554: error: declaration of `operator+' as non-function tstring.h:554: error: expected `;' before '<' token tstring.h:555: error: declaration of `operator+' as non-function tstring.h:555: error: expected `;' before '<' token tstring.h:556: error: declaration of `operator+' as non-function tstring.h:556: error: expected `;' before '<' token tstring.h:557: error: declaration of `operator<<' as non-function tstring.h:557: error: expected `;' before '<' token tstring.h:558: error: declaration of `operator>>' as non-function tstring.h:558: error: expected `;' before '<' token tstring.h: In function `bool operator>(T, const TString<T>&)': tstring.h:632: error: `cLhs' undeclared (first use this function) tstring.h:632: error: (Each undeclared identifier is reported only once for each function it appears in.) tstring.h: In function `bool operator<(T, const TString<T>&)': tstring.h:643: error: `cLhs' undeclared (first use this function) tstring.h: In function `TString<T> operator+(typename TString<T>::LPCT, const TString<T>&) [with T = char]': sha1thread.h:45: instantiated from here tstring.h:517: error: `static int TString<T>::_strlen(const T*) [with T = char]' is protected tstring.h:665: error: within this context sha1thread.h:45: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:666: error: within this context tstring.h:403: error: `void TString<T>::_reallocNreplace(int, const T*) [with T = char]' is protected tstring.h:666: error: within this context sha1thread.h:45: instantiated from here tstring.h:403: error: `void TString<T>::_reallocNreplace(int, const T*) [with T = char]' is protected tstring.h:667: error: within this context sha1thread.h:45: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:668: error: within this context tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:668: error: within this context tstring.h:385: error: `void TString<T>::_reallocNtail(int, const T*) [with T = char]' is protected tstring.h:668: error: within this context tstring.h: In function `TString<T> operator+(const TString<T>&, typename TString<T>::LPCT) [with T = char]': sha1thread.h:45: instantiated from here tstring.h:517: error: `static int TString<T>::_strlen(const T*) [with T = char]' is protected tstring.h:656: error: within this context sha1thread.h:45: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:657: error: within this context tstring.h:403: error: `void TString<T>::_reallocNreplace(int, const T*) [with T = char]' is protected tstring.h:657: error: within this context sha1thread.h:45: instantiated from here tstring.h:530: error: `int TString<char>::m_nLength' is protected tstring.h:658: error: within this context tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:658: error: within this context tstring.h:403: error: `void TString<T>::_reallocNreplace(int, const T*) [with T = char]' is protected tstring.h:658: error: within this context sha1thread.h:45: instantiated from here tstring.h:385: error: `void TString<T>::_reallocNtail(int, const T*) [with T = char]' is protected tstring.h:659: error: within this context tstring.h: In function `bool operator<(const TString<T>&, const TString<T>&) [with T = char]': sha1thread.cpp:65: instantiated from here tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:635: error: within this context tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:635: error: within this context tstring.h:522: error: `static int TString<T>::_strcmp(const T*, const T*) [with T = char]' is protected tstring.h:635: error: within this context tstring.h: In function `bool operator>(const TString<T>&, const TString<T>&) [with T = char]': sha1thread.cpp:67: instantiated from here tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:624: error: within this context tstring.h:528: error: `char*TString<char>::m_pBuffer' is protected tstring.h:624: error: within this context tstring.h:522: error: `static int TString<T>::_strcmp(const T*, const T*) [with T = char]' is protected tstring.h:624: error: within this context make[3]: *** [gnuwordhash.o] Error 1 make[3]: *** Waiting for unfinished jobs.... make[3]: *** [sha1thread.o] Error 1 make[3]: Leaving directory `/var/tmp/portage/mutella-0.4.3/work/mutella-0.4.3/mutella' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/var/tmp/portage/mutella-0.4.3/work/mutella-0.4.3/mutella' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/var/tmp/portage/mutella-0.4.3/work/mutella-0.4.3' make: *** [all] Error 2 Expected Results: I expected it to successfully compile. Portage 2.0.51_rc6 (default-x86-2004.0, gcc-3.4.2, glibc-2.3.4.20040808-r0, 2.6.8-ck8 i686) ================================================================= System uname: 2.6.8-ck8 i686 Intel(R) Celeron(R) CPU 2.70GHz Gentoo Base System version 1.5.3 Autoconf: sys-devel/autoconf-2.59-r4 Automake: sys-devel/automake-1.8.5-r1 Binutils: sys-devel/binutils-2.15.90.0.1.1-r3 Headers: sys-kernel/linux-headers-2.4.22 Libtools: sys-devel/libtool-1.5.2-r5 ACCEPT_KEYWORDS="x86 ~x86" AUTOCLEAN="yes" CFLAGS="-O2 -fomit-frame-pointer" CHOST="i686-pc-linux-gnu" COMPILER="" CONFIG_PROTECT="/etc /usr/X11R6/lib/X11/xkb /usr/kde/2/share/config /usr/kde/3.2/share/config /usr/kde/3.3/env /usr/kde/3.3/share/config /usr/kde/3.3/shutdown /usr/kde/3/share/config /usr/lib/mozilla/defaults/pref /usr/share/config /usr/share/texmf/dvipdfm/config/ /usr/share/texmf/dvips/config/ /usr/share/texmf/tex/generic/config/ /usr/share/texmf/tex/platex/config/ /usr/share/texmf/xdvi/ /var/qmail/control" CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d" CXXFLAGS="-O2 -fomit-frame-pointer -fpermissive" DISTDIR="/usr/portage/distfiles" FEATURES="autoaddcvs ccache distlocks sandbox" GENTOO_MIRRORS="ftp://cs.ubishops.ca:2121/pub/gentoo ftp://cs.ubishops.ca/pub/gentoo" MAKEOPTS="-j2" PKGDIR="/usr/portage/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="" SYNC="rsync://rsync.ca.gentoo.org/gentoo-portage" USE="X aim alsa apm arts audiofile avi berkdb bitmap-fonts bzlib calendar cdinstall cdr cdrom chroot cpdflib crypt cups dba directfb divx4linux dv dvdread encode esd f77 faac faad fbcon fbdev ffmpeg flac flash foomaticdb ftp gcj gcl gd gdbm gif gnome gphoto2 gpm gtk gtk2 gtkhtml i8x0 imlib jabber java javascript jikes jpeg kde libdsk libg++ libwww lzw-tiff mad md5sum mhash mikmod motif mozaccess mozcalendar mozctl mozdomi mozilla moznocompose moznoirc moznomail mpeg mpeg4 mplayer msn music mysql nas native ncurses net nethack nls nocd noexperimental nojoystick nomac noreiserfs ntlm oav offensive oggvorbis opengl oscar oss pam pdflib perl php png posix postgres pthreads python qt quicktime readline ruby sdl slang sndfile snmp sockets spell ssl svga tcltk tcpd tetex threads truetype usb vanilla x86 xml xml2 xmms xprint xv xvid yahoo zlib" --------------------- There is a fix for this error in the mutella cvs on source forge. Lastly, there is a new version (mutella 0.4.5) that compiles with the new gcc
I made an ebuild for the new version (0.4.5) and it compiles with gcc 3.4.2. It's <a href="http://bugs.gentoo.org/show_bug.cgi?id=65834">bug 65834</a>.
Created attachment 41197 [details, diff] Patch to make mutella-0.4.3 sources compile with gcc 3.4.2
Created attachment 41198 [details] New ebuild to apply gcc34 patch to mutella-0.4.3
As mutella-0.4.5 is stable in portage, I see no reason to apply this patch. If you have reason to, please let me know. Thanks for your work on the patch, but it doesn't seem to be needed now.