...one of the most highly
regarded and expertly designed C++ library projects in the
world.

— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards

Front Page / Sequences / Concepts / Forward Sequence |

A Forward Sequence is an MPL concept representing a compile-time sequence of
elements. Sequence elements are
types, and are accessible through Iterators. The `begin` and `end` metafunctions
provide iterators delimiting the range of the sequence
elements. A sequence guarantees that its elements are arranged in a definite,
but possibly unspecified, order. Every MPL sequence is a Forward Sequence.

- The
*size*of a sequence is the number of elements it contains. The size is a nonnegative number. - A sequence is
*empty*if its size is zero.

For any Forward Sequence `s` the following expressions must be valid:

Expression | Type | Complexity |
---|---|---|

begin<s>::type |
Forward Iterator | Amortized constant time |

end<s>::type |
Forward Iterator | Amortized constant time |

size<s>::type |
Integral Constant | Unspecified |

empty<s>::type |
Boolean Integral Constant | Constant time |

front<s>::type |
Any type | Amortized constant time |

Expression | Semantics |
---|---|

begin<s>::type |
An iterator to the first element of the sequence; see begin. |

end<s>::type |
A past-the-end iterator to the sequence; see end. |

size<s>::type |
The size of the sequence; see size. |

empty<s>::type |
A boolean Integral Constant c such that
c::value == true if and only if the sequence is empty; see empty. |

front<s>::type |
The first element in the sequence; see front. |

For any Forward Sequence `s` the following invariants always hold:

- [
`begin<s>::type`,`end<s>::type`) is always a valid range. - An algorithm that iterates through the range [
`begin<s>::type`,`end<s>::type`) will pass through every element of`s`exactly once. `begin<s>::type`is identical to`end<s>::type`if and only if`s`is empty.- Two different iterations through
`s`will access its elements in the same order.