const std = @import("std"); const expect = std.testing.expect; const foos = [_]fn (anytype) bool{ foo1, foo2, }; fn foo1(arg: anytype) bool { return arg; } fn foo2(arg: anytype) bool { return !arg; } test "array of generic fns" { try expect(foos[0](true)); try expect(!foos[1](true)); } test "generic struct" { var a1 = GenNode(i32){ .value = 13, .next = null, }; var b1 = GenNode(bool){ .value = true, .next = null, }; try expect(a1.value == 13); try expect(a1.value == a1.getVal()); try expect(b1.getVal()); } fn GenNode(comptime T: type) type { return struct { value: T, next: ?*GenNode(T), fn getVal(n: *const GenNode(T)) T { return n.value; } }; }