У меня есть функция-член класса, которую я использую для добавления различных типов в список, со специальной обработкой и переносом (все заканчивается в объекте var) для определенных типов:
template<typename V> const var& addvar(const V& v);
template<> const var& addvar<std::string>(const std::string& v) {/*stuff*/}
Однако я передаю строки (ну, константные массивы символов) вот так:
object.addvar("lol");
Хотя я обрабатываю все как std :: strings, это появляется как ссылка на массив const char в выводе типа параметра шаблона. Таким образом, я получаю сообщение об ошибке, не имеющую для него функции, даже с учетом специализации std :: string. Я знаком с выводом размера массива шаблонов, поэтому я пытаюсь использовать этот формат для создания addvar, который может обрабатывать такие вещи, например:
template<size_t N> const var& addvar<char>(const char& (&v)[N]) {/*stuff*/}
Но дела с ошибками компилятора о нелегальных массивах ссылок идут ужасно. Это в VC ++ 2010, если есть какая-то особенная странность с этим, но у меня такое ощущение, что я здесь что-то путаю.