mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-31 10:22:15 +00:00
This is in reference to a [feature request](https://github.com/nim-lang/Nim/issues/22142) that I posted. I'm making this PR to demonstrate the suggested change and expect that this should be scrutinized --------- Co-authored-by: Bung <crc32@qq.com> Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
57 lines
1.0 KiB
Nim
57 lines
1.0 KiB
Nim
discard """
|
|
output: '''
|
|
Printable
|
|
'''
|
|
joinable: false
|
|
"""
|
|
|
|
#[
|
|
The converter is a proper example of a confounding variable
|
|
Moved to an isolated file
|
|
]#
|
|
|
|
type
|
|
Obj1[T] = object
|
|
v: T
|
|
converter toObj1[T](t: T): Obj1[T] =
|
|
return Obj1[T](v: t)
|
|
block t976:
|
|
type
|
|
int1 = distinct int
|
|
int2 = distinct int
|
|
int1g = concept x
|
|
x is int1
|
|
int2g = concept x
|
|
x is int2
|
|
|
|
proc take[T: int1g](value: int1) =
|
|
when T is int2:
|
|
static: error("killed in take(int1)")
|
|
|
|
proc take[T: int2g](vale: int2) =
|
|
when T is int1:
|
|
static: error("killed in take(int2)")
|
|
|
|
var i1: int1 = 1.int1
|
|
var i2: int2 = 2.int2
|
|
|
|
take[int1](i1)
|
|
take[int2](i2)
|
|
|
|
template reject(e) =
|
|
static: assert(not compiles(e))
|
|
|
|
reject take[string](i2)
|
|
reject take[int1](i2)
|
|
|
|
# bug #6249
|
|
type
|
|
Obj2 = ref object
|
|
PrintAble = concept x
|
|
$x is string
|
|
|
|
proc `$`[T](nt: Obj1[T]): string =
|
|
when T is PrintAble: result = "Printable"
|
|
else: result = "Non Printable"
|
|
|
|
echo Obj2() |