#include <iterator>
#include <type_traits>
#include <utility>
template<typename T, typename=void>
struct is_iterable : std::false_type {};
namespace aux {
using std::begin;
// note: no implementation
template<typename C>
auto adl_begin( C&& c )->decltype( begin( std::forward<C>(c) ) );
using std::end;
// note: no implementation
template<typename C>
auto adl_end( C&& c )->decltype( end( std::forward<C>(c) ) );
}
template<typename T>
struct is_iterable<T,
typename std::enable_if<
std::is_same<
typename std::iterator_traits< typename std::decay<decltype( aux::adl_begin( std::declval<T>() ) )>::type >::iterator_category,
typename std::iterator_traits< typename std::decay<decltype( aux::adl_end( std::declval<T>() ) )>::type >::iterator_category
>::value
>::type
> : std::true_type {};
#include <vector>
#include <iostream>
int main() {
std::cout << is_iterable< std::vector<int> >::value << "\n";
std::cout << is_iterable< int >::value << "\n";
}
I2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CiNpbmNsdWRlIDx1dGlsaXR5PgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lPXZvaWQ+CiAgICBzdHJ1Y3QgaXNfaXRlcmFibGUgOiBzdGQ6OmZhbHNlX3R5cGUge307CgogICAgbmFtZXNwYWNlIGF1eCB7CiAgICAgIHVzaW5nIHN0ZDo6YmVnaW47CiAgICAgIC8vIG5vdGU6IG5vIGltcGxlbWVudGF0aW9uCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEM+CiAgICAgIGF1dG8gYWRsX2JlZ2luKCBDJiYgYyApLT5kZWNsdHlwZSggYmVnaW4oIHN0ZDo6Zm9yd2FyZDxDPihjKSApICk7CiAgICAgIHVzaW5nIHN0ZDo6ZW5kOwogICAgICAvLyBub3RlOiBubyBpbXBsZW1lbnRhdGlvbgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDPgogICAgICBhdXRvIGFkbF9lbmQoIEMmJiBjICktPmRlY2x0eXBlKCBlbmQoIHN0ZDo6Zm9yd2FyZDxDPihjKSApICk7CiAgICB9CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgc3RydWN0IGlzX2l0ZXJhYmxlPFQsCiAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAogICAgICAgIHN0ZDo6aXNfc2FtZTwKICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPCB0eXBlbmFtZSBzdGQ6OmRlY2F5PGRlY2x0eXBlKCBhdXg6OmFkbF9iZWdpbiggc3RkOjpkZWNsdmFsPFQ+KCkgKSApPjo6dHlwZSA+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPCB0eXBlbmFtZSBzdGQ6OmRlY2F5PGRlY2x0eXBlKCBhdXg6OmFkbF9lbmQoIHN0ZDo6ZGVjbHZhbDxUPigpICkgKT46OnR5cGUgPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICA+Ojp2YWx1ZQogICAgICA+Ojp0eXBlCiAgICA+IDogc3RkOjp0cnVlX3R5cGUge307CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxpb3N0cmVhbT4KaW50IG1haW4oKSB7CiAgICBzdGQ6OmNvdXQgPDwgaXNfaXRlcmFibGU8IHN0ZDo6dmVjdG9yPGludD4gPjo6dmFsdWUgPDwgIlxuIjsKICAgIHN0ZDo6Y291dCA8PCBpc19pdGVyYWJsZTwgaW50ID46OnZhbHVlIDw8ICJcbiI7Cn0=