PDcurses library menu.h extention
An if inside the loop is usually counterproductive. Consider highlighting the choice afterwards:

    for (int index{}; index &lt; n_items; ++index) {
        mvwprintw(win, 3 + index, 2, items[index]);
    }
    wattron(win, A_BOLD);
    mvwprintw(win, 3 + selected, 2, items[selected]);
    wattroff(win, A_BOLD);




It is very unclear what the 3 and 2 offsets stand for. Apparently they have something to do with the visual layout. Consider giving them some meaningful names.



Since you are writing in c++, you'd be in much better shape operating on vector&lt;char *&gt; rather than a raw array.