It's not actually calling
proc g[T](d: string)
Runwithout B. What it's doing is instantiate g1 withB instantiate g2 withB instantiate g1 withC instantiate g2 withC call g1 withB call g2 withC It only comes up when you explicitly pass in generic parameters. All functions that match the generic parameters are instantiated.
