Рекурсия шаблона останавливается после 7 рекурсий (С++)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Рекурсия шаблона останавливается после 7 рекурсий (С++)

Сообщение Anonymous »

ОБНОВЛЕНИЕ:
Целью следующего кода было создание версии std::max(), позволяющей вводить сколь угодно большое количество аргументов.
На поставленный здесь вопрос был дан ответ путем решения ошибки, указанной @tkausl в комментариях.
Я разработал следующий код не только для решения проблемы, но и в качестве практического примера рекурсии шаблона на будущее. проекты:
(скомпилированы на C++ 23 с использованием g++, MinGW-W64 x86_64, версия 13.1.0, в операционной системе Windows 11).

Код: Выделить всё

#include 
#include 

// base cases
template
auto multi_max(T1 first, T2 second, Args_a... args_a)
{
if constexpr (sizeof...(args_a) == 0)
{
return 0;
}

if constexpr(sizeof...(args_a) == 1)
{
return static_cast  (first);
}

if constexpr(sizeof...(args_a) == 2)
{
return static_cast  (std::max(first, second));
}

else
{
return static_cast  (multi_max(std::max(first, second) , (args_a)...));
}   }

// recursion code
template
auto multi_max(Args_a... args_a)
{
auto answer = multi_max(args_a...);
return static_cast  (answer);
}
Проверяя это с помощью следующей функции main(), я получаю ответ 110:

Код: Выделить всё

// printing result, test 1
int main()
{
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79857205/template-recursion-stops-after-7-recursions-c[/url]
Ответить

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

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

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

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

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