sig
  type cexpr_t =
      [ `Ce_array of Flx_ctypes.cexpr_t * Flx_ctypes.cexpr_t
      | `Ce_atom of string
      | `Ce_call of Flx_ctypes.cexpr_t * Flx_ctypes.cexpr_t list
      | `Ce_cast of string * Flx_ctypes.cexpr_t
      | `Ce_cond of
          Flx_ctypes.cexpr_t * Flx_ctypes.cexpr_t * Flx_ctypes.cexpr_t
      | `Ce_expr of string * string
      | `Ce_infix of string * Flx_ctypes.cexpr_t * Flx_ctypes.cexpr_t
      | `Ce_new of Flx_ctypes.cexpr_t list * string * Flx_ctypes.cexpr_t list
      | `Ce_postfix of string * Flx_ctypes.cexpr_t
      | `Ce_prefix of string * Flx_ctypes.cexpr_t ]
  type ctype_t =
      [ `Ct_array of int * Flx_ctypes.ctype_t
      | `Ct_base of string
      | `Ct_cptm of string * Flx_ctypes.ctype_t
      | `Ct_cptr of Flx_ctypes.ctype_t
      | `Ct_cvptm of string * Flx_ctypes.ctype_t
      | `Ct_cvptr of Flx_ctypes.ctype_t
      | `Ct_fun of Flx_ctypes.ctype_t * Flx_ctypes.ctype_t list
      | `Ct_ptm of string * Flx_ctypes.ctype_t
      | `Ct_ptr of Flx_ctypes.ctype_t
      | `Ct_varray of Flx_ctypes.ctype_t
      | `Ct_vfun of Flx_ctypes.ctype_t * Flx_ctypes.ctype_t list
      | `Ct_vptm of string * Flx_ctypes.ctype_t
      | `Ct_vptr of Flx_ctypes.ctype_t ]
  type cdecl_type_t =
      [ `Cdt_const of Flx_ctypes.ctype_t
      | `Cdt_const_volatile of Flx_ctypes.ctype_t
      | `Cdt_cref of Flx_ctypes.ctype_t
      | `Cdt_cvref of Flx_ctypes.ctype_t
      | `Cdt_ref of Flx_ctypes.ctype_t
      | `Cdt_value of Flx_ctypes.ctype_t
      | `Cdt_volatile of Flx_ctypes.ctype_t
      | `Cdt_vref of Flx_ctypes.ctype_t ]
end