#include <iostream>
#include <vector>
#include <iterator>
#include <type_traits>
template<typename... Args>
using void_t = void;
template<typename T, typename = void>
struct is_iterator : std::false_type {
};
template<typename T>
struct is_iterator<T, void_t<typename std::iterator_traits<T>::value_type>> : std::true_type {
};
int main() {
std::cout << is_iterator<int*>::value << is_iterator<std::back_insert_iterator<std::vector<int>>>::value;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KCnRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CnVzaW5nIHZvaWRfdCA9IHZvaWQ7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+CgkJc3RydWN0IGlzX2l0ZXJhdG9yIDogc3RkOjpmYWxzZV90eXBlIHsKCQkJCgkJfTsKIAoJCXRlbXBsYXRlPHR5cGVuYW1lIFQ+CgkJc3RydWN0IGlzX2l0ZXJhdG9yPFQsIHZvaWRfdDx0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUPjo6dmFsdWVfdHlwZT4+IDogc3RkOjp0cnVlX3R5cGUgewogCgkJfTsKCmludCBtYWluKCkgewoJc3RkOjpjb3V0IDw8IGlzX2l0ZXJhdG9yPGludCo+Ojp2YWx1ZSA8PCBpc19pdGVyYXRvcjxzdGQ6OmJhY2tfaW5zZXJ0X2l0ZXJhdG9yPHN0ZDo6dmVjdG9yPGludD4+Pjo6dmFsdWU7Cn0=