#include <iostream>
#include <string>
struct A
{
A() { std::cout << "A:: default constructor\n" ; }
A( const char* aa ) : a(aa) { std::cout << "A:: one arg constructor\n" ; }
A ( const A& that ) : a(that.a) { std::cout << "A:: copy constructor\n" ; }
A& operator= ( const A& that )
{
std::cout << "A:: assignment\n" ;
a = that. a ;
return *this ;
}
std::string a ;
};
#include <map>
int main()
{
std::map< int, A > map ;
{
// possibly only if A is DefaultConstructible
map[1] = "hello world" ;
/*
A:: one arg constructor
A:: default constructor
A:: assignment
*/
}
std::cout << "------------------------\n" ;
{
// possibly only if A is CopyConstructible
map.insert( { 2, "hello again" } ) ;
/*
A:: one arg constructor
A:: copy constructor
*/
}
std::cout << "------------------------\n" ;
{
map.emplace( 3, "hello for a third time" ) ;
// A:: one arg constructor
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IEEKewogICAgQSgpIHsgc3RkOjpjb3V0IDw8ICJBOjogZGVmYXVsdCBjb25zdHJ1Y3RvclxuIiA7IH0KCiAgICBBKCBjb25zdCBjaGFyKiBhYSApIDogYShhYSkgeyBzdGQ6OmNvdXQgPDwgIkE6OiBvbmUgYXJnIGNvbnN0cnVjdG9yXG4iIDsgfQoKICAgIEEgKCBjb25zdCBBJiB0aGF0ICkgOiBhKHRoYXQuYSkgeyBzdGQ6OmNvdXQgPDwgIkE6OiBjb3B5IGNvbnN0cnVjdG9yXG4iIDsgfQoKICAgIEEmIG9wZXJhdG9yPSAoIGNvbnN0IEEmIHRoYXQgKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiQTo6IGFzc2lnbm1lbnRcbiIgOwogICAgICAgIGEgPSB0aGF0LiBhIDsKICAgICAgICByZXR1cm4gKnRoaXMgOwogICAgfQoKICAgIHN0ZDo6c3RyaW5nIGEgOwp9OwoKI2luY2x1ZGUgPG1hcD4KCmludCBtYWluKCkKewogICAgc3RkOjptYXA8IGludCwgQSA+IG1hcCA7CgogICAgewogICAgICAgIC8vIHBvc3NpYmx5IG9ubHkgaWYgQSBpcyBEZWZhdWx0Q29uc3RydWN0aWJsZQogICAgICAgIG1hcFsxXSA9ICJoZWxsbyB3b3JsZCIgOwogICAgICAgIC8qCiAgICAgICAgQTo6IG9uZSBhcmcgY29uc3RydWN0b3IKICAgICAgICBBOjogZGVmYXVsdCBjb25zdHJ1Y3RvcgogICAgICAgIEE6OiBhc3NpZ25tZW50CiAgICAgICAgKi8KICAgIH0KICAgIHN0ZDo6Y291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iIDsKICAgIHsKICAgICAgICAvLyBwb3NzaWJseSBvbmx5IGlmIEEgaXMgQ29weUNvbnN0cnVjdGlibGUKICAgICAgICBtYXAuaW5zZXJ0KCB7IDIsICJoZWxsbyBhZ2FpbiIgfSApIDsKICAgICAgICAvKgogICAgICAgIEE6OiBvbmUgYXJnIGNvbnN0cnVjdG9yCiAgICAgICAgQTo6IGNvcHkgY29uc3RydWN0b3IKICAgICAgICAqLwogICAgfQogICAgc3RkOjpjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIgOwogICAgewogICAgICAgIG1hcC5lbXBsYWNlKCAzLCAiaGVsbG8gZm9yIGEgdGhpcmQgdGltZSIgKSA7CiAgICAgICAgLy8gQTo6IG9uZSBhcmcgY29uc3RydWN0b3IKICAgIH0KfQo=