Struct template domain
boost::proto::domain — For use in defining domain tags to be used with 
          proto::extends<>,
          BOOST_PROTO_EXTENDS() and
          BOOST_PROTO_DEFINE_OPERATORS().
          A domain associates an expression type with a generator,
          and optionally a grammar. It may also have a super-domain. Expressions
          in a sub-domain are interoperable (i.e. can be combined freely with) expressions in a
          super-domain. Finally, domains control how non-Proto objects are turned into Proto
          expressions and how they are combined to form larger Proto expressions.
        
 
Synopsis
Description
Параметр генератора определяет, как новые выражения в домене обрабатываются. Как правило, генератор заворачивает все новые выражения в обертку, которая придает специфическое поведение домена выражениям в его домене. (См.<proto::extends<>>).
Грамматический параметр определяет, является ли данное выражение действительным в пределах домена, и автоматически отключает любые перегрузки оператора, которые могут привести к созданию недействительного выражения. По умолчанию грамматический параметр по умолчанию соответствует wildcard<proto::_
           >, что делает все выражения действительными в домене.
Супер параметр объявляет домен, который в настоящее время определяется как поддомен Супер. Выражение в поддомене может свободно сочетаться с выражениями в его супердомене (иегосупердомена и т. д.).
Пример:
 template<typename Expr>
 struct MyExpr;
 struct MyGrammar
   : proto::or_< proto::terminal<_>, proto::plus<MyGrammar, MyGrammar> >
 {};
 
 
 
 struct MyDomain
   : proto::domain<proto::generator<MyExpr>, MyGrammar>
 {};
 
 template<typename Expr>
 struct MyExpr
   : proto::extends<Expr, MyExpr<Expr>, MyDomain>
 {
     
 };
            
Шаблоны<domain::as_expr<>>и<domain::as_child<>>определяют, как объекты, не являющиеся Proto, превращаются в терминалы Proto и как должны обрабатываться выражения Proto, прежде чем они будут объединены для формирования более крупных выражений. Они могут быть переопределены в производном домене для настройки. Посмотрите их описания, чтобы понять, как Proto использует эти два шаблона и каково их поведение по умолчанию.