Warum erfordert die Instanziierung von Vorlagen eine Spezialierung für den Fall, in dem sie bereits für alle Fälle durch

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Warum erfordert die Instanziierung von Vorlagen eine Spezialierung für den Fall, in dem sie bereits für alle Fälle durch

by Guest » 06 Sep 2025, 14:50

In C ++, wenn ich versuche, einen Code zu schreiben, der umgekehrt einer Typliste zurückgibt, was ich geschrieben habe (eine Benutzer -definierte Vorlagenklasse): < /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>
Und wenn ich versuche zu rennen: < /p>
aml::type_list ls;
auto x = aml::_reverse(ls);
< /code>
Clang sagt: < /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>
Könnten Sie mir bitte erklären, warum Compiler beispielsweise nicht sofort umgekehrt Funktionsvorlage ? Und warum heißt es, dass eine weitere Spezialierung wie benötigt wird? Weil ich denke>

Top