KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a variadic template function which calls itself to determine the largest number in a list (constituted by the templatized arguments). I am trying to make a specialization for when the parameter pack is empty so I can just return the number at the front of the list, but I don't know how to do that. I am just becoming familiar with variadic templates and template specialization, but this is what I have so far: #include <string> #include <iostream> using namespace std; template <int N, int... N2> int tmax() { return N > tmax<N2...>() ? N : tmax<N2...>(); } template <int N> int tmax() { return N; } int main() { cout << tmax<32, 43, 54, 12, 23, 34>(); } However, this produces the following error: test.cpp: In function ‘int tmax() [with int N = 34, int ...N2 = {}]’: test.cpp:9:45: instantiated from ‘int tmax() [with int N = 23, int ...N2 = {34}]’ test.cpp:9:45: instantiated from ‘int tmax() [with int N = 12, int ...N2 = {23, 34}]’ test.cpp:9:45: instantiated from ‘int tmax() [with int N = 54, int ...N2 = {12, 23, 34}]’ test.cpp:9:45: instantiated from ‘int tmax() [with int N = 43, int ...N2 = {54, 12, 23, 34}]’ test.cpp:9:45: instantiated from ‘int tmax() [with int N = 32, int ...N2 = {43, 54, 12, 23, 34}]’ test.cpp:18:39: instantiated from here test.cpp:9:45: error: no matching function for call to ‘tmax()’ test.cpp:9:45: error: no matching function for call to ‘tmax()’ I have also tried this, just to see if it would work (although it introduces the number 0 to the list randomly so that it can't ever return a number less than 0): template <int N, int... N2> int tmax() { return N > tmax<N2...>() ? N : tmax<N2...>(); } template <> int tmax<>() { return 0; } However, in addition to the errors mentioned above, I get this error:</
Tags (comma-separated)
Save Edits
Cancel