c++/8442: Wrongful compiler error - file available

Juan Carlos Arevalo-Baeza jcab@JCABs-Rumblings.com
Tue Nov 5 00:36:00 GMT 2002


The following reply was made to PR c++/8442; it has been noted by GNATS.

From: Juan Carlos Arevalo-Baeza <jcab@JCABs-Rumblings.com>
To: <bangerth@ticam.utexas.edu>
Cc: <gcc-bugs@gcc.gnu.org>, <gcc-prs@gcc.gnu.org>,
	<nobody@gcc.gnu.org>, <gcc-gnats@gcc.gnu.org>
Subject: Re: c++/8442: Wrongful compiler error - file available
Date: Tue, 5 Nov 2002 00:36:05 -0800

 On Mon, 4 Nov 2002 10:58:35 -0600 (CST), Wolfgang Bangerth=
  wrote:
 >
 >>Yes, Spirit is a complex beast. I'm sorry about that. I've=
  tried
 >>extracting the error bits, but I've been uncuccessful so far.=
  It seems
 >
 >Start from the .ii file you have. First delete all the # lines,=
  I use the
 >following perl script for that usually
 >perl -pi -s 's/^#.*\n//g;' your_file.ii
 >(This way, gcc tells you the real location in the file where=
  something is
 >happening, not the location in the file from which you generated=
  the .ii
 >file.) Then start deleting parts of the file that are not=
  necessary to
 >show the problem. (Function bodies, classes that are only=
  referenced in
 >the function bodies you deleted, classes and namespaces that=
  were only
 >used in classes and namespaces you deleted, etc). In the=
  beginning, the
 >pieces you scrap are usually small, but the blocks can become=
  very large
 >at the end, so don't be scared if you don't make much progress=
  in the
 >beginning.
 >
 >This is a tedious task, and may take an hour or two, but in the=
  end you
 >usually end up with something that has 10-50 lines of code and=
  still shows
 >the problem. With such an example, it is also possible for=
  someone who is
 >not used to your code to see whether this is wrong or right.=
  Otherwise, it
 >is very hard to see...
 
    Ok. I managed to do as you say (turned out step by step as you=
  say <g>), and boiled it down to this code:
 
 ---
 template < class FunctorT >
 struct functor_parser {
 };
 
 template < typename ScannerT >
 struct definition
 {
     template < typename ParserT >
     struct brace_block_functor {
     };
 
     template < typename ParserT >
     static
     functor_parser<brace_block_functor<ParserT> >*
     brace_block(ParserT const& parser) { // line 15
         return 0;
     };
 };
 
 definition<char const*> def; // line 20
 ---
 
    Error spew:
 
 ---
 bug.ii: In instantiation of `definition<const char*>':
 bug.ii:20:   instantiated from here
 bug.ii:15: type/value mismatch at argument 1 in template=
  parameter list for `
    template<class FunctorT> struct functor_parser'
 bug.ii:15:   expected a type, got `brace_block_functor'
 bug.ii:15: confused by earlier errors, bailing out
 ---
 
    This is clearly wrong.
 
 =A0=A0=A0Salutaciones,
 =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0JCAB
 email: jcab@JCABs-Rumblings.com
 ICQ: 10913692 @WORK: 101728263
 WWW: http://www.JCABs-Rumblings.com
 



More information about the Gcc-prs mailing list