#include <type_traits>
#include <vector>
template <typename T>
struct ReadOnlyIterator
{
template <typename Container>
typename std::enable_if<std::is_same<T, typename Container::value_type>::value, ReadOnlyIterator<T>&>::type operator= (const Container &v) { return *this; }
};
int main()
{
ReadOnlyIterator<int> i;
std::vector<int> v;
std::vector<short> w;
i = v;
//i = w; //uncomment for error
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBSZWFkT25seUl0ZXJhdG9yCnsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXI+CiAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgdHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlPjo6dmFsdWUsIFJlYWRPbmx5SXRlcmF0b3I8VD4mPjo6dHlwZSBvcGVyYXRvcj0gKGNvbnN0IENvbnRhaW5lciAmdikgeyByZXR1cm4gKnRoaXM7IH0KfTsKCmludCBtYWluKCkKewogICAgUmVhZE9ubHlJdGVyYXRvcjxpbnQ+IGk7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHY7CiAgICBzdGQ6OnZlY3RvcjxzaG9ydD4gdzsKICAgIGkgPSB2OwogICAgLy9pID0gdzsgLy91bmNvbW1lbnQgZm9yIGVycm9yCn0=