#include <list>
#include <vector>
template<typename Iterator>
void foo(Iterator begin, Iterator end)
{
static_assert(std::is_same<int, typename std::iterator_traits<Iterator>::value_type>::value,
"Invalid value type : must be int");
}
int main() {
std::list<int> l1;
std::vector<int> v1;
foo(std::begin(l1), std::end(l1)); // OK
foo(std::begin(v1), std::end(v1)); // OK
int arr[10];
foo(std::begin(arr), std::end(arr)); // OK
std::vector<float> v2;
//foo(std::begin(v2), std::end(v2)); // Doesn't compile
}
I2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4Kdm9pZCBmb28oSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKewogICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8aW50LCB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnZhbHVlX3R5cGU+Ojp2YWx1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgdmFsdWUgdHlwZSA6IG11c3QgYmUgaW50Iik7Cn0KCmludCBtYWluKCkgewogICAgc3RkOjpsaXN0PGludD4gbDE7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYxOwoKICAgIGZvbyhzdGQ6OmJlZ2luKGwxKSwgc3RkOjplbmQobDEpKTsgLy8gT0sKICAgIGZvbyhzdGQ6OmJlZ2luKHYxKSwgc3RkOjplbmQodjEpKTsgLy8gT0sKCglpbnQgYXJyWzEwXTsKCWZvbyhzdGQ6OmJlZ2luKGFyciksIHN0ZDo6ZW5kKGFycikpOyAvLyBPSwoJCiAgICBzdGQ6OnZlY3RvcjxmbG9hdD4gdjI7CiAgICAvL2ZvbyhzdGQ6OmJlZ2luKHYyKSwgc3RkOjplbmQodjIpKTsgLy8gRG9lc24ndCBjb21waWxlCn0=