treat var modifiers inside the concept body correctly: #1033
This commit is contained in:
parent
4483cefa0c
commit
c3e5c6c326
3 changed files with 46 additions and 8 deletions
30
tests/concepts/tmodifiersinplace.nim
Normal file
30
tests/concepts/tmodifiersinplace.nim
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
type
|
||||
VarContainer[T] = concept c
|
||||
put(var c, T)
|
||||
|
||||
AltVarContainer[T] = concept var c
|
||||
put(c, T)
|
||||
|
||||
NonVarContainer[T] = concept c
|
||||
put(c, T)
|
||||
|
||||
GoodContainer = object
|
||||
x: int
|
||||
|
||||
BadContainer = object
|
||||
x: int
|
||||
|
||||
proc put(x: BadContainer, y: int) = discard
|
||||
proc put(x: var GoodContainer, y: int) = discard
|
||||
|
||||
template ok(x) = assert(x)
|
||||
template no(x) = assert(not(x))
|
||||
|
||||
static:
|
||||
ok GoodContainer is VarContainer[int]
|
||||
ok GoodContainer is AltVarContainer[int]
|
||||
no BadContainer is VarContainer[int]
|
||||
no BadContainer is AltVarContainer[int]
|
||||
ok GoodContainer is NonVarContainer[int]
|
||||
ok BadContainer is NonVarContainer[int]
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue