llvm-gcc-4.2-2.9/gcc/cp/parser.c
/* This function is called when the DECLARATOR is processed.  The TYPE
   was a type defined in the decl-specifiers.  If it is invalid to
   define a type in the decl-specifiers for DECLARATOR, an error is
   issued.  */
This function is called when the DECLARATOR is processed.  The TYPE
was a type defined in the decl-specifiers.  If it is invalid to
define a type in the decl-specifiers for DECLARATOR, an error is
issued.
This function is called when the DECLARATOR is processed . The TYPE was a type defined in the decl - specifiers . If it is invalid to define a type in the decl - specifiers for DECLARATOR an error is issued .
static void
cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
					       tree type)
{
  while (declarator
	 && (declarator->kind == cdk_pointer
	     || declarator->kind == cdk_reference
	     || declarator->kind == cdk_ptrmem))
    declarator = declarator->declarator;
  if (declarator
      && declarator->kind == cdk_function)
    {
      error ("new types may not be defined in a return type");
      inform ("(perhaps a semicolon is missing after the definition of %qT)",
	      type);
    }
}
static void cp_parser_check_for_definition_in_return_type ( cp_declarator * declarator , tree type ) { while ( declarator && ( declarator -> kind == cdk_pointer || declarator -> kind == cdk_reference || declarator -> kind == cdk_ptrmem ) ) declarator = declarator -> declarator ; if ( declarator && declarator -> kind == cdk_function ) { error ( " " ) ; inform ( " " , type ) ; } }
This function is called when the DECLARATOR is processed.
This function is called when the DECLARATOR is processed .
/* [dcl.fct] forbids type definitions in return types.
     Unfortunately, it's not easy to know whether or not we are
     processing a return type until after the fact.  */