1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
#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);
}