String literals are arrays of const characters.
A reference to a 4-character string literal is of type char const (&)[4].
const char [4]and char const [4]- the same types!
char const (&)[N], const char [N] char const [N] char const [N]
#include <iostream>
template<typename T>
void func1(T& x) {std::cout<< typeid(T).name()<<std::endl;}
template<typename T>
void func2(const T& x) {std::cout<< typeid(T).name()<<std::endl;}
template<typename T>
void func3(T const &x) {std::cout<< typeid(T).name()<<std::endl;}
int main()
{
char c[4]= {'a','b','c','d'};
const char c1[4]= {'a','b','c','d'};
char const c2[4]= {'a','b','c','d'};
func1("abcd");
func1(c);
func1(c1);
func1(c2);
func2("abcd");
func2(c);
func2(c1);
func2(c2);
func3("abcd");
func3(c);
func3(c1);
func3(c2);
return 0;
}