Ответ 1
Вы смешали свои типы в списке инициализаторов. В этом случае это может быть довольно ясно, но не забывайте
std::string foo;
for(auto x : {foo, "bar"}){}
Существуют также 2 отдельных типа. Конечно, есть много других случаев, когда вы можете ожидать, что они будут работать, но типы должны точно соответствовать.