#include <iostream>
template <unsigned int N>
void foo(char const (&)[N])
{
std::cout << "Array-foo: " << N << "\n";
}
void foo(char const *)
{
std::cout << "Pointer-foo\n";
}
template <typename T, unsigned int N>
void bar(T const (&)[N])
{
std::cout << "Array-bar: " << N << "\n";
}
template <typename T>
void bar(T const *)
{
std::cout << "Pointer-bar\n";
}
int main()
{
foo("Hello");
bar("Hello");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHVuc2lnbmVkIGludCBOPgp2b2lkIGZvbyhjaGFyIGNvbnN0ICgmKVtOXSkKewogICAgc3RkOjpjb3V0IDw8ICJBcnJheS1mb286ICIgPDwgTiA8PCAiXG4iOwp9Cgp2b2lkIGZvbyhjaGFyIGNvbnN0ICopCnsKICAgIHN0ZDo6Y291dCA8PCAiUG9pbnRlci1mb29cbiI7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgTj4Kdm9pZCBiYXIoVCBjb25zdCAoJilbTl0pCnsKICAgIHN0ZDo6Y291dCA8PCAiQXJyYXktYmFyOiAiIDw8IE4gPDwgIlxuIjsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgYmFyKFQgY29uc3QgKikKewogICAgc3RkOjpjb3V0IDw8ICJQb2ludGVyLWJhclxuIjsKfQoKaW50IG1haW4oKQp7CiAgICBmb28oIkhlbGxvIik7CiAgICBiYXIoIkhlbGxvIik7Cn0K