| Home | Libraries | People | FAQ | More

### Header <boost/proto/operators.hpp>

Contains all the overloaded operators that make it possible to build Proto expression trees.

    BOOST_PROTO_DEFINE_OPERATORS(Trait, Domain)

    namespace boost {
      namespace proto {
        template<typename T> struct is_extension;
        template<typename Arg> unspecified operator+(Arg & arg);
        template<typename Arg> unspecified operator+(Arg const & arg);
        template<typename Arg> unspecified operator-(Arg & arg);
        template<typename Arg> unspecified operator-(Arg const & arg);
        template<typename Arg> unspecified operator*(Arg & arg);
        template<typename Arg> unspecified operator*(Arg const & arg);
        template<typename Arg> unspecified operator~(Arg & arg);
        template<typename Arg> unspecified operator~(Arg const & arg);
        template<typename Arg> unspecified operator&(Arg & arg);
        template<typename Arg> unspecified operator&(Arg const & arg);
        template<typename Arg> unspecified operator!(Arg & arg);
        template<typename Arg> unspecified operator!(Arg const & arg);
        template<typename Arg> unspecified operator++(Arg & arg);
        template<typename Arg> unspecified operator++(Arg const & arg);
        template<typename Arg> unspecified operator--(Arg & arg);
        template<typename Arg> unspecified operator--(Arg const & arg);
        template<typename Arg> unspecified operator++(Arg & arg, int);
        template<typename Arg> unspecified operator++(Arg const & arg, int);
        template<typename Arg> unspecified operator--(Arg & arg, int);
        template<typename Arg> unspecified operator--(Arg const & arg, int);
        template<typename Left, typename Right>
          unspecified operator<<(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator<<(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator<<(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator<<(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator>>(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator>>(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator>>(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator>>(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator*(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator*(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator*(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator*(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator/(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator/(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator/(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator/(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator%(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator%(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator%(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator%(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator+(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator+(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator+(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator+(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator-(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator-(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator-(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator-(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator<(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator<(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator<(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator<(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator>(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator>(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator>(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator>(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator<=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator<=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator<=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator<=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator>=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator>=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator>=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator>=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator==(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator==(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator==(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator==(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator!=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator!=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator!=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator!=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator||(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator||(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator||(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator||(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator&&(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator&&(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator&&(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator&&(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator&(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator&(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator&(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator&(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator|(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator|(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator|(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator|(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator^(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator^(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator^(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator^(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator,(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator,(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator,(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator,(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator->*(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator->*(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator->*(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator->*(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator<<=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator<<=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator<<=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator<<=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator>>=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator>>=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator>>=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator>>=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator*=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator*=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator*=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator*=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator/=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator/=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator/=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator/=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator%=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator%=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator%=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator%=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator+=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator+=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator+=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator+=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator-=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator-=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator-=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator-=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator&=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator&=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator&=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator&=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator|=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator|=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator|=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator|=(Left const & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator^=(Left & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator^=(Left & left, Right const & right);
        template<typename Left, typename Right>
          unspecified operator^=(Left const & left, Right & right);
        template<typename Left, typename Right>
          unspecified operator^=(Left const & left, Right const & right);
        template<typename A0, typename A1, typename A2>
          typename proto::result_of::make_expr<
            proto::tag::if_else_,
            proto::deduce_domain,
            A0 const &,
            A1 const &,
            A2 const &
          >::type const
          if_else(A0 const & a0, A1 const & a1, A2 const & a2);
      }
    }