этот ответ

я есть эта карта, которая прекрасно компилируется в MSVC10:

std::map<std::string, std::ofstream> m_logFiles;

Но в Ubuntu, использующем g ++ 4.5 с включенным C ++ 0x, я получаю следующее сообщение об ошибке:

/usr/include/c++/4.5/bits/ios_base.h|785|error: ‘std :: ios_base :: ios_base (const std :: ios_base &) 'является приватным

Используя указатели вместо объектов, я решил проблему.
Выполняя поиск в Интернете, я узнал, что потоки не предназначены для копирования (причина была хорошо объяснена). Но мой вопрос, является ли std :: ofstream подвижным типом? Если это так, разве не должно быть разрешено его использование в качестве параметра шаблона в стандартных контейнерах?
Если да, то стоит ли G ++ от MSVC10 по этому вопросу? (что объясняет, почему это работает на MSVC). Я знаю, что было бы глупо просить авторов компиляторов полностью реализовать что-то, что даже не является окончательным, но мне любопытно относительно будущего.

Использование g ++ 4.6.1 не помогло.

Редактировать: читая комментарии, я вырыл немного дальше и обнаружил, что проблема связана с вставкой, а не с объявлением карты.

Читая ссылку Кубби, я попробовал следующее:

#include <string>
#include <fstream>
#include <map>

using namespace std;

int main()
{
    map<string, ofstream> m_logFiles;
    ofstream st;
    m_logFiles.insert(make_pair<string, ofstream>(string("a"), move(st)));
    return 0;
}

Но все равно не повезло. G ++ жалуется на использование конструктора удаленных копий.

Ответы на вопрос(2)

Ваш ответ на вопрос