123456789101112131415161718192021222324252627282930313233343536373839 |
- 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
|