From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27949 invoked by alias); 11 May 2005 18:24:39 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 27726 invoked by uid 48); 11 May 2005 18:24:29 -0000 Date: Wed, 11 May 2005 18:24:00 -0000 From: "marciso at box43 dot pl" To: gcc-bugs@gcc.gnu.org Message-ID: <20050511182420.21515.marciso@box43.pl> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug c++/21515] New: problem with tempalte and tempalte function compilation in a namespace X-Bugzilla-Reason: CC X-SW-Source: 2005-05/txt/msg01556.txt.bz2 List-Id: Hi, I tried to compile quite simple code: a template and operator<<(ostreami&) for it (as a template function). The template is in a namespace, but operator<< I'd like to have in the 'std' namespace. Unfortunately, the compiler rejected the code, however other compilers (i.e. in other versions) compiled the code without any complainits. I'm quite sure that the code is correct, buti, to be honest, I didn't check what c++ iso standard is saying about it. I tested the following code on my on version 3.4.3-20050101 and then build and tested on the 3.4.4-20050506 snapshot. The issue occured in both versions. On the other hand, I compiled successfully the same code on g++ 3.3.5-20050130 that is installed on other (old&slow) box (gentoo, i586, for details see below). Additionally, I tested the same code on 2.95.x on Solaris (SunOS 5.9? - but I don't remember right now) - it was also compiled. I didn't check gcc-4.x. Summary: The code (problem.cc): #include using namespace std; namespace a { template class A; } template std::ostream & std::operator<< (std::ostream &, a::A const &); namespace a { template class A { T v; public: A(T _v) : v(_v) {}; friend std::ostream & std::operator<< <>(std::ostream &, A const &); }; } template std::ostream & std::operator<<(std::ostream & o, a::A const & aa) { return o << aa.v ; } int main() { a::A o(16.0); cerr << o << endl; } Command: g++ problem.cc Output: problem.cc: In instantiation of `a::A': problem.cc:32: instantiated from here problem.cc:19: error: template-id `operator<< <>' for `std::basic_ostream >& std::operator<<(std::basic_ostream >&, const a::A&)' does not match any template declaration problem.cc: In function `std::ostream& std::operator<<(std::ostream&, const a::A&) [with T = float]': problem.cc:34: instantiated from here problem.cc:16: error: `float a::A::v' is private problem.cc:27: error: within this context Compilation failed on 3.4.3-20050101 and 3.4.4-20050506 on my box: Release: 3.4.4 20050506 (prerelease) Environment: System: Linux baki 2.6.12-rc1baki #5 Sat Mar 26 09:01:44 UTC 2005 i686 AMD Athlon(tm) XP 2000+ AuthenticAMD GNU/Linux Architecture: i686 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: : (reconfigured) ./configure --prefix=/home/marciso/gcc-tmp-installatio --enable-languages=c++ Release:3.4.3-20050110 (Gentoo Linux 3.4.3.20050110-r2, ssp-3.4.3.20050110-0, pie-8.7.7) Environment: System: Linux baki 2.6.12-rc1baki #5 Sat Mar 26 09:01:44 UTC 2005 i686 AMD Athlon(tm) XP 2000+ AuthenticAMD GNU/Linux Architecture: i686 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: /var/tmp/portage/gcc-3.4.3.20050110-r2/work/gcc-3.4.3/configure --enable-version-specific-runtime-libs --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/3.4.3-20050110 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/3.4.3-20050110/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.3-20050110 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.3-20050110/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.3-20050110/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/3.4.3-20050110/include/g++-v3 --host=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --disable-libunwind-exceptions --disable-multilib --enable-java-awt=gtk --enable-languages=c,c++,objc,java,f77 --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu Compilation passed on 3.3.5-20050130: Release: 3.3.5-20050130 (Gentoo Linux 3.3.5.20050130-r1, ssp-3.3.5.20050130-1, pie-8.7.7.1) Environment: System: Linux gateway 2.6.10-hardened-r3bramka #2 Sun Feb 20 12:58:22 CET 2005 i586 GNU/Linux Architecture: i586 host: i586-pc-linux-gnu build: i586-pc-linux-gnu target: i586-pc-linux-gnu configured with: /var/tmp/portage/gcc-3.3.5.20050130-r1/work/gcc-3.3.5/configure --enable-version-specific-runtime-libs --prefix=/usr --bindir=/usr/i586-pc-linux-gnu/gcc-bin/3.3.5-20050130 --includedir=/usr/lib/gcc-lib/i586-pc-linux-gnu/3.3.5-20050130/include --datadir=/usr/share/gcc-data/i586-pc-linux-gnu/3.3.5-20050130 --mandir=/usr/share/gcc-data/i586-pc-linux-gnu/3.3.5-20050130/man --infodir=/usr/share/gcc-data/i586-pc-linux-gnu/3.3.5-20050130/info --with-gxx-include-dir=/usr/lib/gcc-lib/i586-pc-linux-gnu/3.3.5-20050130/include/g++-v3 --host=i586-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --disable-libunwind-exceptions --disable-multilib --disable-libgcj --enable-languages=c,c++,f77 --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu Cheers Marcin. -- Summary: problem with tempalte and tempalte function compilation in a namespace Product: gcc Version: 3.3.4 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: marciso at box43 dot pl CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21515