template <int I, typename T = long double>
class Foo { };
template <class C, long L, bool B = false>
class Foo { };
template <int *IP>
class Foo { };
template <double D>
class Foo { };
vector<int> v = {2,3,5,7}; for (auto it = v.front(); it != v.back(); ++it) cout << it;
235
2357
23456
234567
C: .front()
and .back()
yield references, not iterators
vector<int> v = {1,2,3}; cout << v.end() - v.begin() << endl;
123
2
3
int
.
set<int> s = {2,4,1,3}; for (auto it = s.begin(); it < s.end(); ++it) cout << *it;
2413
1234
123
E: You can’t use <
on a set::iterator