Ошибка: Illegal Indirection (Код ошибки - C2100)

Не могу понять в чем проблема с простым кодом (решал задачу на CodeWars). В начале она работала, потом после нескольких запусков она начала выдавать ошибку Illegal Indirection (C2100). За ошибкой в Google заглядывал, но так и не разобрался с проблемой. Буду очень благодарен за помощь! :)

std::map <char, unsigned> count(const std::string &str)
{
    if (str.length() == 0)
        return { 0, 0 };

    std::map <char, unsigned> characters_map;
    std::map <char, unsigned>::iterator itr;

    for (std::size_t i = 0; i < str.length(); i++)
    {
        itr = characters_map.find(str[i]);

        if (itr != characters_map.end())
        {
            itr -> second++;
        }
        else
        {
            characters_map.insert(std::make_pair(str[i], 1));
        }
    }

    return characters_map;
}

Ответы (2 шт):

Автор решения: Harry
return { 0, 0 };

тут у вас два int, вот компилятор и недоумевает, как их в map превратить...

Рекомендую длинно, но надежно и понятно :) :

std::map <char, unsigned> characters_map;
if (str.length() == 0)
{
    characters_map.insert(std::make_pair<char,unsigned>(0,0));
    return characters_map;
}

std::map <char, unsigned>::iterator itr;
→ Ссылка
Автор решения: KoVadim

Сократим чуточку код, попутно исправив ошибку компиляции

std::map <char, unsigned> count(const std::string &str)
{
    if (str.empty())
        return {{ 0, 0 }};

    std::map <char, unsigned> characters_map;
    for (char c : str)
    {
        characters_map[c]++;
    }
    return characters_map;
}

Хотя это больше похоже на преждевременную оптимизацию. Я бы писал вот так

std::map <char, unsigned> count(const std::string &str)
{
    std::map <char, unsigned> characters_map;
    for (char c : str)
    {
        characters_map[c]++;
    }
    return characters_map;
}

в этом случае для пустой строки будет возвращаться пустой мап. Но это зависит от условий задачи

→ Ссылка