La parola chiave static
non fa parte del tipo, a seconda del contesto è un identificatore di archiviazione o di ambito e non ha alcuna influenza sul tipo. Pertanto, non può essere utilizzato come parte della definizione del tipo, motivo per cui non è valido qui.
Un typedef è una definizione di tipo, ovvero stai dicendo che "questo nome" ora si riferisce a "questo tipo", il nome che devi fornire deve essere un identificatore come definito dallo standard di lingua, il tipo deve essere un tipo specificatore, cioè un tipo già nominato, sia di tipo base o typedef'd, uno struct, union, class o enum specificatore, con possibili qualificatori di tipo, cioè const, o volatile.
La parola chiave statica tuttavia non modifica il tipo, dice qualcosa sull'oggetto, (in generale, non nel senso OOP). Ad es. è la variabile che viene inserita nella memoria statica, non nel tipo.
Sembra che si sta cercando di usare un typedef come macro, vale a dire
#define MYINT static int
Sia typedef e statico sono classi di memoria nella lingua (rigorosamente vero per C, io credo che sia vero anche per C++). Puoi avere una sola classe di archiviazione in una singola dichiarazione: ne hai due nel tuo esempio, da qui l'errore. –
+1. "L'identificatore typedef è chiamato '' identificatore della classe di memoria '' solo per comodità sintattica;" – dirkgently