:relfileprefix: ../../../ [#boost-urls-grammar-tuple_rule] == xref:boost.adoc[pass:[boost]]::xref:boost/urls.adoc[pass:[urls]]::xref:boost/urls/grammar.adoc[pass:[grammar]]::tuple_rule Match a series of rules in order === Synopsis Declared in header `` [source,cpp,subs="verbatim,macros,-callouts"] ---- template< class R0, class... Rn> constexpr pass:q[_implementation-defined_] tuple_rule( R0 const& r0, Rn const&... rn) noexcept; ---- === Description This matches a series of rules in the order specified. Upon success the input is adjusted to point to the first unconsumed character. There is no implicit specification of linear white space between each rule. [,cpp] ---- using value_type = __see_below__; ---- The sequence rule usually returns a `std::tuple` containing the the `value_type` of each corresponding rule in the sequence, except that `void` values are removed. However, if there is exactly one non-void value type `T`, then the sequence rule returns `system::result<T>` instead of `system::result<tuple<...>>`. === Rules are used with the function xref:boost/urls/grammar/parse-02.adoc[parse] . [,cpp] ---- system::result< std::tuple< unsigned char, unsigned char, unsigned char, unsigned char > > rv = parse( "192.168.0.1", tuple_rule( dec_octet_rule, squelch( delim_rule('.') ), dec_octet_rule, squelch( delim_rule('.') ), dec_octet_rule, squelch( delim_rule('.') ), dec_octet_rule ) ); ---- [,cpp] ---- sequence = rule1 rule2 rule3... ---- * link:https://datatracker.ietf.org/doc/html/rfc5234#section-3.1[3.1. Concatenation (rfc5234)] === Parameters |=== | Name | Description | *rn* | A list of one or more rules to match |=== === See Also xref:boost/urls/grammar/dec_octet_rule.adoc[dec_octet_rule] , xref:boost/urls/grammar/delim_rule-0a.adoc[delim_rule] , xref:boost/urls/grammar/parse-02.adoc[parse] , xref:boost/urls/grammar/squelch.adoc[squelch] .