discard """ targets: "c js" """ from stdtest/testutils import accept, reject, whenVMorJs # toSeq-like templates template toSeq2(a: iterable): auto = var ret: seq[typeof(a)] for ai in a: ret.add ai ret template toSeq3(a: iterable[string]): auto = var ret: seq[typeof(a)] for ai in a: ret.add ai ret template toSeq4[T](a: iterable[T]): auto = var ret: seq[typeof(a)] for ai in a: ret.add ai ret template toSeq5[T: SomeInteger](a: iterable[T]): auto = var ret: seq[typeof(a)] for ai in a: ret.add ai ret template toSeq6(a: iterable[int | float]): auto = var ret: seq[typeof(a)] for ai in a: ret.add ai ret template toSeq7(a: iterable[seq]): auto = var ret: seq[typeof(a)] for ai in a: ret.add ai ret template fn7b(a: untyped) = discard template fn7c(a: typed) = discard template fn7d(a: auto) = discard template fn7e[T](a: T) = discard template fn8a(a: iterable) = discard template fn8b[T](a: iterable[T]) = discard template fn8c(a: iterable[int]) = discard template bad1 = template fn4(a: int, b: iterable[float, int]) = discard template bad2 = proc fn4(a: iterable) = discard template bad3 = proc fn4(a: iterable[int]) = discard template good4 = template fn1(a: iterable) = discard template fn2(a: iterable[int]) = discard # iterators iterator iota(n: int): auto = for i in 0..