#include <iostream>
#include <typeinfo>
#include <map>

struct A {
    A() {
        std::cout << "A was created" << std::endl;
    }

    A(A &&) {
        std::cout << "A's move constructor was called" << std::endl;
    }

    A(A const &) {
        std::cout << "A's copy constructor was called" << std::endl;
    }

    ~A() {
        std::cout << "A was destroyed" << std::endl;
    }
};

int main() {
    std::map<int, A> theMap {{1, A()}, {2, A()}};

    std::cout << "Starting for loop now" << std::endl;

    for (auto const & pair : theMap) {
        std::cout << "performed an iteration" << std::endl;
    }

    std::cout << "for loop finished" << std::endl;
}