The code in "How-To-Repeat" is legal, to the best of my knowledge. However, it fails to compile with the following error: tTemplate.cc:19: no `Templated<T>::NonTemplated::operator std::vector<T, std::allocator<_CharT> >::size_type() const' member function declared in class `Templated<T>::NonTemplated' tTemplate.cc:19: template definition of non-template ` Templated<T>::NonTemplated::operator std::vector<T, std::allocator<_CharT> >::size_type() const' Release: g++ (GCC) 3.2 Environment: Linux master 2.4.19 #1 SMP Mon Aug 12 15:33:48 CEST 2002 i686 unknown How-To-Repeat: #include <vector> template <class T> class Templated { private: typedef std::vector<T> buf_t; class NonTemplated { public: operator typename buf_t::size_type() const; private: typename buf_t::size_type myIndex; }; }; template <class T> Templated<T>::NonTemplated::operator typename Templated<T>::buf_t::size_type() const { return myIndex; } int main() { Templated<int> tmpl; return 0; }
State-Changed-From-To: open->analyzed State-Changed-Why: confirmed
From: "Giovanni Bajo" <giovannibajo@libero.it> To: <gcc-gnats@gcc.gnu.org>, <loose@astron.nl>, <gcc-bugs@gcc.gnu.org>, <nobody@gcc.gnu.org>, <gcc-prs@gcc.gnu.org> Cc: "Wolfgang Bangerth" <bangerth@ices.utexas.edu> Subject: Re: c++/7906: Templated class with nested non-templated class having an operator() fails to compile Date: Thu, 10 Apr 2003 04:34:22 +0200 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&p r=7906 Reconfirmed on 2.95 -> 3.3 20030401. The code does look legit to me in fact. Can anybody test it with the mainline? It really looks like a parsing bug. Giovanni Bajo
State-Changed-From-To: analyzed->closed State-Changed-Why: Fixed in mainline (3.4)
Subject: Bug 7906 CVSROOT: /cvs/gcc Module name: gcc Changes by: reichelt@gcc.gnu.org 2003-07-22 10:54:14 Modified files: gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/parse: typedef3.C operator2.C def-tmpl-arg1.C funptr1.C ambig3.C operator3.C template10.C template11.C invalid-op1.C condexpr1.C Log message: PR c++/3004 * g++.dg/parse/typedef3.C: New test. PR c++/7906 * g++.dg/parse/operator2.C: New test. PR c++/8895 * g++.dg/parse/def-tmpl-arg1.C: New test. PR c++/9282 * g++.dg/parse/funptr1.C: New test. PR c++/9452 * g++.dg/parse/ambig3.C: New test. PR c++/9454 * g++.dg/parse/operator3.C: New test. PR c++/9486 * g++.dg/parse/template10.C: New test. PR c++/9488 * g++.dg/parse/template11.C: New test. PR c++/10150 * g++.dg/parse/invalid-op1.C: New test. PR c++/10247 * g++.dg/parse/condexpr1.C: New test. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.2906&r2=1.2907 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/typedef3.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/operator2.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/def-tmpl-arg1.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/funptr1.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/ambig3.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/operator3.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/template10.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/template11.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/invalid-op1.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/condexpr1.C.diff?cvsroot=gcc&r1=NONE&r2=1.1