I need get the type of container item(seq, array, iterator etc), so I write an
template to get the item type, but when work with the generic, sometime it will
fail to compile using the wrapper. Here is the code
import macros
template getTypeOfItem(t: untyped): auto =
type(t[0])
template getType(t: untyped): auto =
type(t[0])
template foo1(t: untyped) =
var x: type(t[0])
template foo2(t: untyped) =
var x: getType(t)
template foo3(t: untyped) =
var x: getTypeOfItem(t)
proc foo[T](x: seq[seq[T]]) =
foo1(x) # this works
foo2(x) # this works too if we import the macros
# without import macros, it fail to compile too
# because there is proc in the macros named getType
# very strange why it affect
foo3(x) # this works for non generic function
# but it fail in this function
foo(@[@[1,2], @[3,4]])
My question is:
1. Is there a way to make the foo3(x) compile?
2. Why the foo2(x) compiles when import the macros, it seems very strange?
Thank you.