Каков пример практического использования "рекурсивно вложенного шаблона"?
Я нашел эту специфическую модель, упомянутую в этом вопросе.
Каково практическое использование такого шаблона?
#include <iostream>
using namespace std;
template<typename T>
struct Recursive
{
using cycle = struct X : Recursive<X> { int a; };
cycle c;
};
int main()
{
Recursive<int> x;
// cout<< x.c.a; // this gives infinite recursion error
return 0;
}
1 ответ
Одно из применений написанного вами кода - узнать глубину шаблона компилятора, прочитав сообщение об ошибке при его компиляции:)
С clang
:
<source>:8:11: fatal error: recursive template instantiation exceeded maximum depth of 1024
С gcc
:
<source>:7:26: fatal error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum)
using cycle = struct X : Recursive<X> { int a; };