This works:
void foo(int (&a)[3]) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
While this doesn't:
void foo(int (*a)[3]) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
I consider int (&a)[3]
and int (*a)[3]
have the same meaning!