>>63
それが合法なのは、プログラム領域に確保された
文字列定数"Hoge"へのポインタを返してるからだ。

const char* hoge()
{
  const char p[5] = "Hoge";
  return p;
}

こんな感じの実装は文句なしに違法。