#include <map>
#include <iostream>
struct no_copy_type {
double d;
no_copy_type(no_copy_type const&)=delete;
no_copy_type(double x):d(x) {}
~no_copy_type() { std::cout << "destroyed " << d << "\n"; }
};
int main() {
std::map< int, no_copy_type > m;
m.emplace( std::piecewise_construct,
std::forward_as_tuple(1),
std::forward_as_tuple(3.14)
);
std::cout << "destroy happens next:\n";
}
ICAgICNpbmNsdWRlIDxtYXA+CiAgICAjaW5jbHVkZSA8aW9zdHJlYW0+CgogICAgc3RydWN0IG5vX2NvcHlfdHlwZSB7CiAgICAgIGRvdWJsZSBkOwogICAgICBub19jb3B5X3R5cGUobm9fY29weV90eXBlIGNvbnN0Jik9ZGVsZXRlOwogICAgICBub19jb3B5X3R5cGUoZG91YmxlIHgpOmQoeCkge30KICAgICAgfm5vX2NvcHlfdHlwZSgpIHsgc3RkOjpjb3V0IDw8ICJkZXN0cm95ZWQgIiA8PCBkIDw8ICJcbiI7IH0KICAgIH07CiAgICBpbnQgbWFpbigpIHsKICAgICAgc3RkOjptYXA8IGludCwgbm9fY29weV90eXBlID4gbTsKICAgICAgbS5lbXBsYWNlKCBzdGQ6OnBpZWNld2lzZV9jb25zdHJ1Y3QsCiAgICAgIAlzdGQ6OmZvcndhcmRfYXNfdHVwbGUoMSksCiAgICAgIAlzdGQ6OmZvcndhcmRfYXNfdHVwbGUoMy4xNCkKICAgICAgKTsKICAgICAgc3RkOjpjb3V0IDw8ICJkZXN0cm95IGhhcHBlbnMgbmV4dDpcbiI7CiAgICB9