Почему шаблонный экземпляр требует специализации в случае, где это уже сделано для всех случаев?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему шаблонный экземпляр требует специализации в случае, где это уже сделано для всех случаев?

Сообщение Anonymous »

В C ++, когда я пытаюсь написать код, который возвращает обратный список типов, что я написал (класс шаблонов, определенный пользователем): < /p>
template
constexpr decltype(auto) merge(const type_list& first, const type_list& second)
{
return type_list();
}

template
constexpr decltype(auto) _reverse(type_list ls)
{
if constexpr (empty(ls)) return type_list();
return merge(_reverse(type_list()),type_list());
}
< /code>
И когда я пытаюсь запустить: < /p>
aml::type_list ls;
auto x = aml::_reverse(ls);
< /code>
clang говорит: < /p>
In file included from test.cpp:4:
././lesson_4.hpp:64:16: error: no matching function for call to '_reverse'
64 | return merge(_reverse(type_list()),type_list());
| ^~~~~~~~
././lesson_4.hpp:64:16: note: in instantiation of function template specialization 'aml::_reverse' requested here
test.cpp:10:16: note: in instantiation of function template specialization 'aml::_reverse' requested here
10 | auto x = aml::_reverse(ls);
| ^
././lesson_4.hpp:61:27: note: candidate template ignored: failed template argument deduction
61 | constexpr decltype(auto) _reverse(type_list ls)
| ^
1 error generated.
< /code>
Не могли бы вы объяснить мне, почему компилятор просто не может создать экземпляр, например, Reverse шаблон функции ? И почему это говорит о том, что другая специальность необходима, например, ? Потому что я думаю, что они также являются экземпляром Typename, сначала, Typename ... Другая специализация

Подробнее здесь: https://stackoverflow.com/questions/797 ... is-already
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»