# Header `lexy/dsl/times.hpp`

The `times`

and `twice`

rules.

## Rule `lexy::dsl::times`

`lexy/dsl/times.hpp`

```
namespace lexy::dsl
{
template <std::size_t N>
constexpr
```*rule* auto times(*rule* auto rule);
template <std::size_t N>
constexpr *rule* auto times(*rule* auto rule, *separator* auto sep);
}

`times`

is a rule that parses `rule`

exactly `N`

times in sequence, with an optional separator in between.

- Parsing
Parses

`rule`

exactly`N`

times in`sequence`

. If a`separator`

has been specified, parses it in between. After the last rule, handles a trailing separator as necessary.- Errors
All errors raised by parsing

`rule`

or`sep`

. The rule then fails.`lexy::unexpected_trailing_separator`

: if a trailing separator can be matched after the last item and that is not allowed; at the position of the separator. It then recovers by simply consuming the separator.

- Values
All values produced by each

`rule`

invocation in order.

Example 1. Parse and sum three integers separated by comma

Note | See `lexy::dsl::repeat` if the number of repetitions should be determined by the input. |

## Rule `lexy::dsl::twice`

`lexy/dsl/times.hpp`

```
namespace lexy::dsl
{
constexpr
```*rule* auto twice(*rule* auto rule)
{
return times<2>(rule);
}
constexpr *rule* auto twice(*rule* auto rule, *separator* auto sep)
{
return times<2>(rule, sep);
}
}

`twice`

is a rule that is an alias for `times`

where `N == 2`

.