I tried to get the following code to work, but for some reason, the object won't let me add more variants. I have no idea why this is happening, especially since the variant type doesn't contain any references. Please see the error below. Thanks in advance for your help.
Code: import std/typetraits, assume/typeit type QueueHandle_t = int UBaseType_t = int # Mock implementations of the queue functions proc xQueueCreate(len: UBaseType_t, size: UBaseType_t): QueueHandle_t = return 1 proc containsRef*(_: seq): bool = true proc containsRef*(_: ref): bool = true proc containsRef*(_: string): bool = true proc containsRef*(val: distinct): bool = mixin containsRef containsRef(val.distinctBase()) proc containsRef*[T](_: openArray[T]): bool = mixin containsRef containsRef(default(T)) proc containsRef*[T](_: T): bool = false proc containsRef(t: object or tuple): bool = typeit(t, {titAllFields}): if containsRef(it): return true false proc containsRef(T: typedesc): bool = mixin containsRef containsRef(default(T)) type NoRef = concept type C not(containsRef(C)) type Queue*[T: NoRef] = object handle*: QueueHandle_t QueueError* = object of IOError QueueRecvError* = object of QueueError QueueFullError* = object of QueueError proc init*[V: NoRef](T: typedesc[Queue[V]], len: UBaseType_t): T = result.handle = xQueueCreate(len, sizeof(T).UBaseType_t) ## Some usage examples below: type ValidObjectKind* = enum voSomeVariant voAnotherVariant ValidObject = object someParam: uint32 case kind*: ValidObjectKind of voSomeVariant: someVariant: uint32 of voAnotherVariant: anotherVariant* : bool var vQueue = Queue[ValidObject].init(10) Run Error: `/workspaces/server/tests/integration/tqueue.nim(68, 19) Error: cannot instantiate Queue [type declared in /workspaces/server/tests/integration/tqueue.nim(45, 3)]` got: <typedesc[ValidObject]> but expected: <T: NoRef>