I think this is one of those "behind the scenes" things that the compiler does.
When compiled, a will just be replaced with 8. It would have to be const because otherwise it could be theoretically changed which doesn't make sense since there is no address to start with.
It's similar to just creating: staticconstint a = 8;
Unless someone makes a pointer point to a, the compiler won't even bother allocating memory to a and will instead just do a direct replacement at compile time although I suppose that could be compiler/optimization selection specific.