summary refs log blame commit diff stats
path: root/tests/concepts/tmanual.nim
blob: 43290a6ad673ec2f63f7621d9cc386ded90b0d58 (plain) (tree)






















                                 

                          
                 
                   
                      














                                           
discard """
  output: '''1
2
3
4
5
6
a
b
t
e
s
t
'''
"""

template accept(e: expr) =
  static: assert compiles(e)

template reject(e: expr) =
  static: assert(not compiles(e))

type
  Container[T] = concept c
    c.len is Ordinal
    items(c) is T
    for value in c:
      type(value) is T

proc takesIntContainer(c: Container[int]) =
  for e in c: echo e

takesIntContainer(@[1, 2, 3])
reject takesIntContainer(@["x", "y"])

proc takesContainer(c: Container) =
  for e in c: echo e

takesContainer(@[4, 5, 6])
takesContainer(@["a", "b"])
takesContainer "test"
reject takesContainer(10)