Следующий код не будет компилироваться в gcc 4.8.2.
Проблема в том, что этот код попытается скопировать конструкцию std::pair<int, A>
, которая не может произойти из-за struct A
отсутствующих копий и перемещения конструкторов.
Является ли gcc неудачным здесь или я что-то не хватает?
#include <map>
struct A
{
int bla;
A(int blub):bla(blub){}
A(A&&) = delete;
A(const A&) = delete;
A& operator=(A&&) = delete;
A& operator=(const A&) = delete;
};
int main()
{
std::map<int, A> map;
map.emplace(1, 2); // doesn't work
map.emplace(std::piecewise_construct,
std::forward_as_tuple(1),
std::forward_as_tuple(2)
); // works like a charm
return 0;
}