parameters: (self, start, end, name, templated_types, modifiers,
                   reference, pointer, array)
docstring: Args:
            name: str name of main type
            templated_types: [Class (Type?)] template type info between <>
            modifiers: [str] type modifiers (keywords) eg, const, mutable, etc.
            reference, pointer, array: bools
docstring_summary: Args:
            name: str name of main type
            templated_types: [Class (Type?)] template type info between <>
            modifiers: [str] type modifiers (keywords) eg, const, mutable, etc.
            reference, pointer, array: bools
docstring_tokens: Args : name : str name of main type templated_types : [ Class ( Type? ) ] template type info between < > modifiers : [ str ] type modifiers ( keywords ) eg const mutable etc . reference pointer array : bools
function: def __init__(self, start, end, name, templated_types, modifiers,
                   reference, pointer, array):
          """
          Args:
            name: str name of main type
            templated_types: [Class (Type?)] template type info between <>
            modifiers: [str] type modifiers (keywords) eg, const, mutable, etc.
            reference, pointer, array: bools
          """
          _GenericDeclaration.__init__(self, start, end, name, [])
          self.templated_types = templated_types
          if not name and modifiers:
              self.name = modifiers.pop()
          self.modifiers = modifiers
          self.reference = reference
          self.pointer = pointer
          self.array = array
function_tokens: def __init__ ( self , start , end , name , templated_types , modifiers , reference , pointer , array ) : _GenericDeclaration . __init__ ( self , start , end , name , [ ] ) self . templated_types = templated_types if not name and modifiers : self . name = modifiers . pop ( ) self . modifiers = modifiers self . reference = reference self . pointer = pointer self . array = array