Simple parsing for string formatting
There are a few points about this that seem open to improvement (at least to me).


Don't compare bools to true or false, just use their value directly, so 

placeholder_mode == false


becomes:

!placeholder_mode


likewise:

if(placeholder_mode == true)


becomes:

if (placeholder_mode)

You have basically everything in one giant function. This makes the code more difficult to understand, analyze, etc.
Some of the checks don't seem to accomplish much (if anything)--preventing leading zeros, for one obvious example.
Like most parsers, this is basically a state machine. As in many cases, it would probably be somewhat clearer if the state machine were a little more explicit.

I'd probably start with something like this:

enum states { COPYING, START_PLACEHOLDER, READ_PLACEHOLDER, END_PLACEHOLDER, ERROR };

states state;

while (it != fmt.end()) {
switch (state) { 
case COPYING:
    if (*it == '{') state = START_PLACEHOLDER;
    else output.push_back(*it);
    break;
case START_PLACEHOLDER:
    if (*it == '0') state = ERROR;
    else state = READ_PLACEHOLDER;
    // intentional fall-through
case READ_PLACEHOLDER: 
        num = std::stoi(it);
        check_range(num, 0, arg_count);
        output.push_back(args[num]);


...and so on. This structure can help clarify what happens in what states, and the conditions under which you progress from one state to another.