### 8.3 Basic Types For C`++`

<< the examples that follow are based on a01.C >>

C`++` adds two more builtin types to the set defined for C. These are the unknown type and the vtable record type. The unknown type, type 16, is defined in terms of itself like the void type.

The vtable record type, type 17, is defined as a structure type and then as a structure tag. The structure has four fields: delta, index, pfn, and delta2. pfn is the function pointer.

<< In boilerplate $vtbl_ptr_type, what are the fields delta, index, and delta2 used for? >>

This basic type is present in all C`++` programs even if there are no virtual methods defined.

    .stabs "struct_name:sym_desc(type)type_def(17)=type_desc(struct)struct_bytes(8)
            elem_name(delta):type_ref(short int),bit_offset(0),field_bits(16);
            elem_name(index):type_ref(short int),bit_offset(16),field_bits(16);
            elem_name(pfn):type_def(18)=type_desc(ptr to)type_ref(void),
                                        bit_offset(32),field_bits(32);
            elem_name(delta2):type_def(short int);bit_offset(32),field_bits(16);;"
            N_LSYM, NIL, NIL

    .stabs "$vtbl_ptr_type:t17=s8
            delta:6,0,16;index:6,16,16;pfn:18=*15,32,32;delta2:6,32,16;;"
            ,128,0,0,0

    .stabs "name:sym_dec(struct tag)type_ref($vtbl_ptr_type)",N_LSYM,NIL,NIL,NIL

    .stabs "$vtbl_ptr_type:T17",128,0,0,0