Предел вложенных объявлений шаблонов в C ++ - PullRequest
4 голосов
/ 14 октября 2019

Существует много ограничений, налагаемых стандартом C ++, таких как максимальное количество параметров функции, максимальная длина идентификатора или максимальное количество вложенных областей.

Что меня интересует, так это ограничение(или его отсутствие) максимальных вложенных шаблонных объявлений, таких как:

template <template <template < template <template < ...

Я слышал от кого-то, что это всего два (template <template <typename T> class>), но это не так (по крайней мере, не так)с самой последней версией компилятора MSVC).

Меня интересует, существует ли на самом деле ограничение для этого и, если есть, каково его значение и как оно изменилось между различными выпускамиСтандарт С ++.

1 Ответ

5 голосов
/ 14 октября 2019

Стандарт не налагает никакого значения. Это значение, определяемое реализацией, которое будет задокументировано вашим компилятором. Единственный прямой предел, который я могу найти в стандарте, поскольку в [temp.arg.template] нет ничего, что можно найти в [implimits] , и это

  • Параметры шаблона в объявлении шаблона ([temp.param]) [1 024].

, где 1024 - рекомендуемое минимальное количество параметров. Это всего лишь рекомендация, параграфы 1 и 2 :

Приложение B (информативное) Количество реализации [implimits]

  1. Поскольку компьютеры конечны, реализации C ++ неизбежно ограничены в размерах программ, которые они могут успешно обрабатывать. Каждая реализация должна документировать те ограничения, где они известны. Эта документация может ссылаться на фиксированные ограничения там, где они существуют, например, как вычислять переменные ограничения как функцию от доступных ресурсов, или говорить, что фиксированные ограничения не существуют или неизвестны.

  2. Ограничения могутограничить количества, которые включают те, которые описаны ниже или другие. Число в скобках после каждого количества рекомендуется как минимальное для этого количества. Однако эти величины являются лишь ориентировочными и не определяют соответствие.

упорная мина

Сделать так, чтобыясно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...