std :: set не имеет члена emplace

Реализует ли g ++ 4.7.2 std::set::emplace, как определено стандартом C ++ 11 и документировано Вот?

Я написал следующий маленький тестовый пример:

#include <set>
#include <string>

struct Foo
{
std::string mBar;
bool operator<(const Foo& rhs) const
{
return mBar < rhs.mBar;
}
Foo(const std::string bar) : mBar(bar) {};
};

typedef std::set<Foo> Foos;

int main()
{
Foos foos;
foos.emplace(std::string("Hello"));
}

В G ++ 4.7.2 это не компилируется:

[john.dibling@somewhere hacks]$ g++ -o main.o -std=c++0x -c main.cpp
main.cpp: In function ‘int main()’:
main.cpp:19:10: error: ‘Foos’ has no member named ‘emplace’

Также не компилируется под IDEOne, однако он компилируется под MSVC 2012 Update 1.

24

Решение

Это не реализовано в gcc 4.7.2.

Есть некоторое объяснение:

Просто чтобы уточнить: это не было надзор. У нас было противный
проблема в проекте C ++ 0x Standard с std :: pair, которая по существу
сделать невозможным добавление членов emplace_ * в std :: map,
std :: multimap и т. д., не нарушая существующий код пользователя. Таким образом, мы
ждал этого, пока все не прояснилось во всей этой области. Сейчас
на самом деле можно работать на этих объектах.

Ваш код прекрасно компилируется с gcc 4.8.0, см. LWS.

26

Другие решения

emplace() для ассоциативных контейнеров был добавлен в libstdc++ для gcc 4.8.0, под gcc 4.7.2 это не будет работать.

5

По вопросам рекламы [email protected]