discard """ output: '''2 88''' """ type TValue* {.pure, final.} = object of RootObj a: int PValue = ref TValue PPValue = ptr PValue var x: PValue new x var sp: PPValue = addr x sp.a = 2 if sp.a == 2: echo 2 # with sp[].a the error is gone # Test the new auto-deref a little {.experimental.} proc p(x: var int; y: int) = x += y block: var x: ref int new(x) x.p(44) var indirect = p x.indirect(44) echo x[]