    var _out_error: [*c]u8 = null;
    // The Zig-side `I{Trait}` and the cimport'd C `{c_vtable_type}` are both
    // `extern struct` with identical layout, but Zig considers them nominally
    // distinct and rejects the direct call with `expected type
    // '[*c]const {c_vtable_type}', found 'I{Trait}'`. `@bitCast` performs the
    // layout-preserving reinterpretation that crosses the nominal boundary.
    // The C FFI layer expects a typed pointer to the vtable, so pass `&_c_vtable`.
    const _c_vtable: {{ c_vtable_type }} = @bitCast(vtable);
    const _rc = {{ c_register }}(name, &_c_vtable, user_data, @ptrCast(&_out_error));
    if (out_error) |ptr| {
        ptr.* = _out_error;
    }
    return _rc;
