#include <iostream>
#include <iterator>
#include <algorithm>

struct X
{
    X() { std::cout << "X construct @" << (const void*)this << '\n'; }
    ~X() { std::cout << "X destruct @" << (const void*)this << '\n'; }
};

std::ostream& operator<<(std::ostream& s, const X&)
{
    return s << "X\n";
}

int main()
{
    std::initializer_list<X> b;

    {
        std::initializer_list<X> a{X()};
        b = a;
        std::copy( a.begin(), a.end(), std::ostream_iterator<X>(std::cout, "") );
    }

    std::copy( b.begin(), b.end(), std::ostream_iterator<X>(std::cout << '\n', "") );
}