Defaulted arguments are a blessing and a curse; they let you reduce duplication of constructors - which can itself be a cause for errors. C++11 addresses that to some degree.
Unfortunately they also mean it often requires a lot more diligence when refactoring code, especially as you accumulate more and more variants of the same finger print.
void someFunc(int count, void* ptr=nullptr, int count=1);
becoming
void someFunc(int count, bool hasPtr=true, void* ptr=nullptr, int count=1);
is going to cause problems where people had actually filled in all 3 arguments.
someFunc(10, p, 0)
is going to successfully match
someFunc(/*count=*/10, /*hasPtr=*/true, /*ptr*/=NULL, /*count*/=1)
So you're going to have to do an amount of extra work to remember to fix this. My experience has been that other programmers frequently fall afoul of this kind of change and nasty crash/behavior bugs ensue.