In C there can be several declarations and one definition of a type.
In D we can have only ever one of either. There might be multiple
cursors in the translation unit that all refer to the same canonical type.
Unfortunately, the canonical type is orthogonal to which cursor is the actual
definition, so we prefer to find the definition if it exists, and if not, we
take the canonical declaration so as to not repeat ourselves in D.
In C there can be several declarations and one definition of a type. In D we can have only ever one of either. There might be multiple cursors in the translation unit that all refer to the same canonical type. Unfortunately, the canonical type is orthogonal to which cursor is the actual definition, so we prefer to find the definition if it exists, and if not, we take the canonical declaration so as to not repeat ourselves in D.