If your class has to return references, and if it has to return a reference to a modifiable vector when invoked on a modifiable object, then I do not think there is a way to avoid the duplication - at least, not the duplicate declaration.
Notice, that some types of the Standard Library also suffer from the same problem. For instance, sequence containers such as std::vector
have both a const
and a non-const
overload of operator []
, at()
, back()
, front()
, data()
, and so on.