Как сделать метод const и неconst одновременно?

Пишу свою структуру данных в виде шаблона struct. В ней должен быть помимо прочего метод front() для обращения к определенному элементу.
Проблема в том, что этот метод нужен и для сравнения этого элемента с внешними (возврат значения из функции по константной ссылке) и для присвоения элементу значения (возврат из функции обычной ссылки). Я пробовал писать два метода, либо вложенную структуру которая съедает круглые скобочки и переопределяет оператор присваивания. Получалась какая-то лажа. Покажите какую-нибудь каноничную реализацию такого.

#include <cstddef>

template <typename T, std::size_t MaxElements>
struct cb{
T buffer[MaxElements];
// Тут реализация метода front() который возвращает buffer[0]
};

int main(){cb<int,7>cc;cc.front()=0;if(cc.front()==0){};return 0;};

Ответы (1 шт):

Автор решения: EOF

Написать две функции-члена. Одну для const обьектов, вторую для обычных обьектов.

T& front()
{
    return buffer[0];
}

const T& front() const
{
    return buffer[0];
}

P.S. Не забудьте написать нужные проверки в этих функциях.

→ Ссылка