I suspect the OP's interpretation of "pass by reference" was passing a pointer, not the trickery shown by Elkvis (neat as it is, when used right).
Originally Posted by phantomotap
It is also a function that will not work in this example.
Fortunately, a C++ compiler will reward you with a compilation error in the body of intermediary() - unless the SomeFunction() template has been specialised for a char pointer. This is because the argument a inside intermediary() is actually a pointer, lacking size information. Which brings us back to the OP's original problem ....
template<int N> void SomeFunction(char (&c)[N]) // Elkvis's function
// something with elements of c, cognisant of the value of N
void intermediary(char a)
SomeFunction(a); // This will not compile, fortunately
SomeFunction(x); // will call Elkvis's template function correctly
intermediary(x); // attempt to call Elkvis's template function