template
struct is_iterator
{
static const bool value = ??? // What to write ???
};
int main()
{
assert(false == is_iterator::valu
template
struct is_iterator
{
static T makeT();
typedef void * twoptrs[2]; // sizeof(twoptrs) > sizeof(void *)
static twoptrs & test(...); // Common case
template static typename R::iterator_category * test(R); // Iterator
template static void * test(R *); // Pointer
static const bool value = sizeof(test(makeT())) == sizeof(void *);
};