Каков пример практического использования «рекурсивно вложенного шаблона»? - PullRequest
0 голосов
/ 02 июля 2018

Я нашел этот специфический паттерн, упомянутый в этом вопросе .

Что такое практическое использование такого шаблона?

#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 Ответ

0 голосов
/ 02 июля 2018

Одно из применений написанного вами кода - узнать глубину шаблона компилятора, прочитав сообщение об ошибке при его компиляции:)

С 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; };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...