Struct deduce_domain
boost::proto::deduce_domain — A pseudo-domain for use in functions and metafunctions that require a domain parameter.
          It indicates that the domain of the parent node should be inferred from the domains of the child nodes.
 
Synopsis
Description
Когда<proto::deduce_domain>используется в качестве домена — либо явно, либо косвенно<proto::make_expr()>,<proto::unpack_expr()>, либо оператор Proto перегружает — Proto будет использовать домены детских выражений для вычисления домена родителя. Это делается таким образом, что (A) выражения в доменах, которые разделяют общий супердомен, являются взаимодействующими, и (B) выражения, которые находятся в домене по умолчанию (или его поддомене), совместимы свсемивыражениями. Правила следующие:
- сильнее, чем его супердомен.
- <proto::default_domain>,<proto::basic_default_domain>и все их поддоменыслабее, чем все другие домены.
- <proto::basic_default_domain>слабее<proto::default_domain>.
- Для каждого ребенка определите набор доменовSN, который включает в себя домен ребенка и все его супердомены.
- Определить наборIS, который является пересечением всех индивидуальных множествSN, которые не содержат<proto::default_domain>или<proto::basic_default_domain>.
- Определите наборIW, который является пересечением всех индивидуальных наборовSN, которые содержат<proto::default_domain>или<proto::basic_default_domain>.
- Определите наборP, который является союзомISиIW.
- Общий домен является самым сильным доменом в набореPсо следующими оговорками.
- ПустьUбудет объединением всех множествSN. Если результат<proto::default_domain>или<proto::basic_default_domain>иUсодержит элемент, которыйне<proto::default_domain>или<proto::basic_default_domain>, то это ошибка.
Примечание: вышеприведенное описание звучит так, как будто было бы дорого вычислять во время компиляции. На самом деле, все это можно сделать с помощью перегрузки функций C++.