Исходя из вашего комментария о том, что вы хотите включить / отключить проверку границ, вы можете использовать функцию шаблона оболочки:
template <class T>
inline typename T::reference deref(T &cont, typename T::size_type idx)
{
#if BOUNDS_CHECK
return cont.at(idx);
#else
return cont[idx];
#endif
}
template <class T>
inline typename T::const_reference deref(const T &cont, typename T::size_type idx)
{
#if BOUNDS_CHECK
return cont.at(idx);
#else
return cont[idx];
#endif
}
Вы должны изменить свой код, чтобы включить это, но как только вы его установили, вы можете включить или отключить проверку по своему усмотрению.
Я признаю, что это выглядит немного уродливо:
deref(vec, 10) = ...;