namespace PPP {
using Unicode = long;
// ------- first range checking -----
// primitive but most helpful to learners and portable
template<class T> concept Element = true;
PPP_EXPORT template <Element T>
class Checked_vector : public std::vector<T> { // trivially range-checked vector (no iterator checking)
public:
using std::vector<T>::vector;
T& operator[](size_t i)
{
std::cerr << "PPP::vector::[]\n";
return this->std::vector<T>::at(i);
}
const T& operator[](size_t i) const
{
std::cerr << "PPP::vector::[] const\n";
return this->std::vector<T>::at(i);
}
// ...
}; // range-checked vector