O termo "constante" é realmente ambíguo e a palavra const- chave é enganosa.
constsignifica: "não permitir que o valor desse objeto não seja alterado após a inicialização". Isso não significa "constante em tempo de compilação". Seu valor inicial pode (e geralmente vem) ainda vir de fontes de tempo de execução.
Você precisa de uma constante em tempo de compilação para um array vinculado.
Às vezes, é possível ter um objeto nomeado fooque seja constante em tempo de compilação, se for const e foi inicializado a partir de uma expressão constante, como um literal ou constexpralgo. Esse é o caso c; não é o caso b.