Como retornar uma estrutura anônima em C?

Tentando algum código, percebi que o seguinte código compila:

struct { int x, y; } foo(void) {
}

Parece que estamos definindo uma função chamadafoo que retorna um anônimostruct.

Agora, minha pergunta é: Isso acontece apenas com o meu compilador ou é C (99) legal? Em caso afirmativo, qual é a sintaxe correta para uma declaração de retorno e como posso atribuir corretamente o valor retornado a uma variável?