これはエラーではなくて警告でよく出ると思うのだが、この現象の解説がやはりというべきかここにあった。
char** ReadLineImpl::my_completion () {
char* matches[1];
matches[0] = "add";
return matches;
}
要するに「単に配列などを定義しただけでは、一時的にメモリが確保されているだけなので、場合によっては正しいポインタを返さないかもしれないよ」という仕様由来の背景がある。
ああ、ややこしい。
解決策で最もわかりやすいのは変数を static で宣言することだろう。
なお、一般的な static の修飾子の説明はここあたり参照。