Especificando o parâmetro padrão ao chamar a função C ++

Suponha que eu tenha um código como este:

void f(int a = 0, int b = 0, int c = 0)
{
    //...Some Code...
}

Como você pode evidentemente ver acima com meu código, os parâmetrosa,bec tem valores de parâmetro padrão de 0. Agora, veja minha função principal abaixo:

int main()
{
   //Here are 4 ways of calling the above function:
   int a = 2;
   int b = 3;
   int c = -1;

   f(a, b, c);
   f(a, b);
   f(a); 
   f();
   //note the above parameters could be changed for the other variables
   //as well.
}

Agora eu sei que não posso simplesmente pular um parâmetro e deixá-lo ter o valor padrão, porque esse valor seria avaliado como o parâmetro nessa posição. O que quero dizer é que não posso, digamos, ligar,f(a,c), Porque,c seria avaliado comob, que é o que eu não quero, principalmente sec é o tipo errado. Existe uma maneira de a função de chamada especificar em C ++, usar qualquer valor de parâmetro padrão que exista para a função em qualquer posição, sem se limitar a retroceder do último parâmetro para nenhum? Existe alguma palavra-chave reservada para conseguir isso ou pelo menos uma solução alternativa? Um exemplo que posso dar seria o seguinte:

f(a, def, c) //Where def would mean default.

questionAnswers(5)

yourAnswerToTheQuestion