LINUX.ORG.RU

История изменений

Исправление bugfixer, (текущая версия) :

Это не работает в С++ вообще.

Никакой контейнер стандартной библиотеки не может иметь тип const T потому что allocator является ill-formed.

Делов то:

#include <iostream>
#include <list>
#include <string>
#include <vector>

struct S {
   explicit S(const std::string& str): str_(str) {}
   const std::string str_;
};

int main()
{
   typedef std::list<S> StrList;
   StrList strList;
   strList.emplace_back("aaa");

   typedef std::vector<S> StrVec;
   StrVec strVec;
   strVec.emplace_back("bbb");
   strVec.emplace_back("ccc");

   std::cout << strList.size() << ' ' << strVec.size() << std::endl;
   return 0;
}

Вы же этого хотели добиться (@byko3y)? Я уверен есть стандартный wrapper template позволяющий сделать то же самое в обобщённом виде, если нет - пишется за 5 минут.

Исправление bugfixer, :

Это не работает в С++ вообще.

Никакой контейнер стандартной библиотеки не может иметь тип const T потому что allocator является ill-formed.

Делов то:

#include <iostream>
#include <list>
#include <string>
#include <vector>

struct S {
   explicit S(const std::string& str): str_(str) {}
   const std::string str_;
};

int main()
{
   typedef std::list<S> StrList;
   StrList strList;
   strList.emplace_back("aaa");

   typedef std::vector<S> StrVec;
   StrVec strVec;
   strVec.emplace_back("bbb");
   strVec.emplace_back("ccc");

   std::cout << strList.size() << ' ' << strVec.size() << std::endl;
   return 0;
}

Вы же этого хотели добиться (@byko3y)? Я уверен есть стандартный wrapper template позволяющий добиться того же, если нет - пишется за 5 минут.

Исходная версия bugfixer, :

Это не работает в С++ вообще.

Никакой контейнер стандартной библиотеки не может иметь тип const T потому что allocator является ill-formed.

Делов то:

#include <iostream>
#include <list>
#include <string>
#include <vector>

struct S {
   explicit S(const std::string& str): str_(str) {}
   const std::string str_;
};

int main()
{
   typedef std::list<S> StrList;
   StrList strList;
   strList.emplace_back("aaa");

   typedef std::vector<S> StrVec;
   StrVec strVec;
   strVec.emplace_back("bbb");
   strVec.emplace_back("ccc");

   std::cout << strList.size() << ' ' << strVec.size() << std::endl;
   return 0;
}

Вы же этого хотели добиться (@byko3y)? Я уверен есть стандартный wrapper template позволяющий добиться того же, если нет - пишется за 5 минут.