Macro BOOST_PROTO_DEFINE_OPERATORS
BOOST_PROTO_DEFINE_OPERATORS — Defines a complete set of expression template-building operator overloads for use
      with non-Proto terminal types.
 
Synopsis
BOOST_PROTO_DEFINE_OPERATORS(Trait, Domain)
Description
С помощью BOOST_PROTO_DEFINE_OPERATORS() можно ненавязчиво адаптировать существующий (не-Proto) тип к терминалу Proto.
Trait - это название унарной булевой метафункции, которая возвращается истинной для любых типов, которые вы хотели бы рассматривать как терминалы Proto.
Домен  - это имя домена Proto, связанного с этими новыми терминалами Proto. Вы можете использовать proto::default_domain для Domain, если вы не хотите связывать эти терминалы с каким-либо доменом.
Пример:
namespace My {
  
  struct S {};
  
  template<typename T> struct IsS : mpl::false_ {};
  template<> struct IsS<S> : mpl::true_ {};
  
  
  
  
  
  BOOST_PROTO_DEFINE_OPERATORS(IsS, proto::default_domain)
}
int main() {
  My::S s1, s2;
  
  
  s1 + s2; 
}