blob: c31b5564c2349062bd3716f85fcd8a80b659906c (
plain) (
tree)
|
|
discard """
nimout: '''
instantiation 1 with typeDesc[int] and typeDesc[float]
instantiation 2 with typeDesc[float] and typeDesc[string]
instantiation 3 with typeDesc[string] and typeDesc[string]
counter: 3
'''
output: "int\nfloat\nint\nstring"
"""
import typetraits, macros
var counter {.compileTime.} = 0
macro makeBar(A, B: typedesc): typedesc =
inc counter
echo "instantiation ", counter, " with ", A.getTypeInst.repr, " and ", B.getTypeInst.repr
result = A
type
Bar[T, U] = makeBar(T, U)
var bb1: Bar[int, float]
var bb2: Bar[float, string]
var bb3: Bar[int, float]
var bb4: Bar[string, string]
proc match(a: int) = echo "int"
proc match(a: string) = echo "string"
proc match(a: float) = echo "float"
match(bb1)
match(bb2)
match(bb3)
match(bb4)
static:
echo "counter: ", counter
|