Почему следующий код разбивается как на Visual Studio, так и на GCC?
Для его аварийного восстановления требуется диапазон для цикла, std:: map, std::string и ссылки на строку. Если я удалю кого-нибудь из них, он будет работать.
#include <iostream>
#include <string>
#include <map>
using namespace std;
struct S
{
    map<string, string> m;
    S()
    {
        m["key"] = "b";
    }
    const string &func() const
    {
        return m.find("key")->second;
    }
};
int main()
{
    for (char c : S().func())
        cout << c;
    return 0;
}
Идеальная ссылка: http://ideone.com/IBmhDH