# infix¶

## Header¶

```
#include <boost/hof/infix.hpp>
```

## Description¶

The `infix`

function adaptor allows the function to be used as an infix
operator. The operator must be placed inside the angle brackets(ie `<`

and `>`

).

## Synopsis¶

```
template<class F>
constexpr infix_adaptor<F> infix(F f);
```

## Semantics¶

```
assert(x <infix(f)> y == f(x, y));
```

## Operator precedence¶

Infix operators have the precedence of relational operators. This means
operators such as `+`

or `*`

have higher precedence:

```
assert((x + y <infix(f)> z) == ((x + y) <infix(f)> z));
assert((x * y <infix(f)> z) == ((x * y) <infix(f)> z));
```

However, operators such as `|`

or `==`

have lower precedence::

```
assert((x | y <infix(f)> z) == (x | (y <infix(f)> z)));
assert((x == y <infix(f)> z) == (x == (y <infix(f)> z)));
```

Also, infix operators have left-to-right associativity:

```
assert(x <infix(f)> y <infix(g)> z == ((x <infix(f)> y) <infix(g)> z));
```

## Example¶

```
#include <boost/hof.hpp>
#include <cassert>
using namespace boost::hof;
struct plus_f
{
template<class T, class U>
T operator()(T x, U y) const
{
return x+y;
}
};
int main() {
constexpr infix_adaptor<plus_f> plus = {};
int r = 3 <plus> 2;
assert(r == 5);
}
```