>>365
調べてきた。

ttp://www-ccs.ucsd.edu/c/express.html ("array lvalue expression")
ttp://www.kuzbass.ru/docs/isocpp/conv.html#conv.array

配列からポインターへの変換が、
Cでは配列型の左辺値のみに起こり、
C++では右辺値でも起こることになってるみたい。

ここで itostr の戻り値は右辺値なので、可変長引数の領域には
Cでは char [20] がまるごとコピーされて格納され、
C++では char* が格納されることになる。

gcc で警告されたのも納得できる。
それぞれのアセンブリ出力も取ってみたが、
この違いを反映したものになった。