See the trivial test-case below.
gcc version 16.2.1 20260819 (Red Hat 16.2.1-2) (GCC)
$ g++ -c -Wall -O2 /tmp/T.cpp -o /dev/null
In member function ‘virtual bool O_GP::cli(char*)’,
inlined from ‘void parse_o(char*)’ at /tmp/T.cpp:31:8,
inlined from ‘int main(int, char**)’ at /tmp/T.cpp:37:10:
/tmp/T.cpp:12:24: warning: ‘char* strncpy(char*, const char*, size_t)’ offset 8
is out of the bounds [0, 8] [-Warray-bounds=]
12 | strncpy(ylims, arg, 1);
| ~~~~~~~^~~~~~~~~~~~~~~
#include <string.h>
static struct O_N {
virtual bool cli(char*) { return false; }
} __o_n;
static struct O_GP : public O_N {
char ylims[32] = {0};
bool cli(char *arg)
{
strncpy(ylims, arg, 1);
return true;
}
} __o_gp;
static struct O_N *O = &__o_gp;
#define IF(a) if (!strcmp(n, #a))
static void parse_o(char *n)
{
IF (n)
O = &__o_n;
else IF (gp)
O = &__o_gp;
else
return;
extern char *arg;
O->cli(arg);
}
int main(int argc, char* argv[])
{
while (*argv)
parse_o(*argv++);
return 0;
}