The following code example is taken from the book
C++23 - The Complete Guide
by Nicolai M. Josuttis,
Leanpub, 2026
The code is licensed under a
Creative Commons Attribution 4.0 International License.
// raw code
#include <iostream>
#include <vector>
template<typename ValT>
class Collection {
private:
std::vector<ValT> values;
public:
Collection (const auto&... vals)
: values{vals...} {
}
// subscript operator for const and non-const collection:
auto& operator[] (this auto&& self, int idx) {
return self.values[idx];
}
//...
};
int main()
{
Collection<int> coll{1, 2, 3, 4, 5};
const Collection<int> ccoll{1, 2, 3, 4, 5};
coll[2] = 42; // OK
//ccoll[2] = 42; // ERROR (good)
std::cout << coll[2] << '\n';
std::cout << ccoll[2] << '\n';
}