Type-bound Operators (GNU Fortran Compiler Internals)

### 4.2 Type-bound Operators ¶

Type-bound operators are in fact basically just `GENERIC` procedure bindings and are represented much in the same way as those (see Type-bound Procedures).

They come in two flavours: User-defined operators (like `.MYOPERATOR.`) are stored in the `f2k_derived` namespace’s `tb_uop_root` symtree exactly like ordinary type-bound procedures are stored in `tb_sym_root`; their symtrees’ names are the operator-names (e.g. ‘`myoperator`’ in the example). Intrinsic operators on the other hand are stored in the namespace’s array member `tb_op` indexed by the intrinsic operator’s enum value. Those need not be packed into `gfc_symtree` structures and are only `gfc_typebound_proc` instances.

When an operator call or assignment is found that cannot be handled in another way (i.e. neither matches an intrinsic nor interface operator definition) but that contains a derived-type expression, all type-bound operators defined on that derived-type are checked for a match with the operator call. If there’s indeed a relevant definition, the operator call is replaced with an internally generated `GENERIC` type-bound procedure call to the respective definition and that call is further processed.