Нет, в этом примере нет специализации. Специализация - это не когда вызывается шаблонная функция. Это когда вы пишете несколько версий шаблона, некоторые из которых имеют специализированные типы. Как говорит DeadMG, вы не можете частично специализировать функцию.

я есть шаблонная функция, которую я хочу специализироватьfoo вconst char[N] (жестко закодированные строки)

    template<typename T>
const std::string foo() ;

    template<typename T,int N>
const std::string foo<T[N]>() { return "T[N]"; } //this doesn't work for const char[12]

    template<>
const std::string foo<const char*>() { return "Const char"; } //this doesn't work for const char[12]

   template<typename T>
   void someother function(T obj)
   {

   string s = foo<T>(); //I want to overload when T is const chat[N]
   }

   function("Hello World");  //When calling like this the type is const char[12]

Я думал, что могу сделать что-то вроде было сделаноВот.
Но это не так хорошо работает, потому что я не передаю параметр, а только шаблонный тип.
Я мог бы сделать это так, но просто нет причин передавать параметр этой функции.

Пример не работает, потому что я не передаю переменную. Пробовал несколько вещей, но не могу заставить его работать.

Это единственная специализация, которую я не могу решить. Я специализировал функцию для int, string и других типов, и они работают нормально.

 error LNK2001: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const __cdecl foo<char const [12]>(void)" 

Первое шаблонное объявление не имеет никакого предназначения ... Я пытаюсь получить правильную специализацию, которая будет использоваться для моего случая.

Ответы на вопрос(2)

Ваш ответ на вопрос