entendendo os namespaces C

Citando deaqui,

Em C, existem dois namespaces de tipos diferentes: um namespace de nomes de tags struct / union / enum e um namespace de nomes typedef.

name.c

$ cat name.c
#include<stdio.h>

typedef long long long2;

int long2 () {
    return 4;
}

int main() {

    printf("hello, world!");
    return 0;
}
$ gcc name.c -o name
name.c:4: error: 'long2' redeclared as different kind of symbol
name.c:3: error: previous declaration of 'long2' was here
$

name2.c

$ cat name2.c
#include<stdio.h>

int four() {
    return 4;
}

struct dummy {
    int member;
};

int main() {

    struct dummy four;
}

$ gcc name2.c -o name2
$ 

Estou tentando entender os conflitos de espaço para nome em C.

No primeiro caso, por que existe um conflito? As funções também pertencem ao espaço de nome typedef?

No segundo caso, por que não há conflito? A função e a variável são nomeadas quatro. Por que o compilador permite isso? Como é&four deveria ser resolvido?

questionAnswers(3)

yourAnswerToTheQuestion