discard """
  output: '''0
0
2
100'''
"""

type
  RectArray*[R, C: static[int], T] = distinct array[R * C, T]

  StaticMatrix*[R, C: static[int], T] = object
    elements*: RectArray[R, C, T]

  StaticVector*[N: static[int], T] = StaticMatrix[N, 1, T]

proc foo*[N, T](a: StaticVector[N, T]): T = 0.T
proc foobar*[N, T](a, b: StaticVector[N, T]): T = 0.T


var a: StaticVector[3, int]

echo foo(a) # OK
echo foobar(a, a) # <--- hangs compiler

# bug #3112

type
  Vector[N: static[int]] = array[N, float64]
  TwoVectors[Na, Nb: static[int]] = tuple
    a: Vector[Na]
    b: Vector[Nb]

when isMainModule:
  var v: TwoVectors[2, 100]
  echo v[0].len
  echo v[1].len
  #let xx = 50
  v[1][50] = 0.0

