#include <cstdlib>

int foo(int) {
   return 0;
}

template<typename T>
int foo(const T*) {
   return 1;
}

template<typename T, std::size_t N>
int foo(const T (&a)[N]) {
   return N;
}

int main() {
   int i = foo(main);
}
