Я пытаюсь специализировать функцию шаблона для нескольких типов, один из них — const char*.
template<typename T = const char*>
void f(T&&);
template<>
void f<int>(int&& k) { std::cout << "Now in int fcn (" << k << ")!\n"; }
template<>
void f<const char*>(const char* && k) { std::cout << "Now in cc* fcn (" << k << ")!\n"; }
int main() {
f<int>(5);
f("HELLO");
return 0;
}
Но когда я выполняю f(HELLO), я получаю следующую ошибку:
main.cpp:(.text+0x32): undefined reference to `void f<char const (&) [6]>(char const (&) [6])'
Как заставить его интерпретировать HELLO как константу char*, а не как массив? Если я специализируюсь на массивах, мне нужно по одному для каждого размера массива?
Кроме того, общая функция шаблона перехватывает f(HELLO):
template<typename T>
void f(T&& k) { /* Definition... */ }
Будет ли он создавать одну специализацию для каждого размера массива, который мне нужен, или он каким-то образом преобразует строковый литерал в const char*?