std::pair<foo, bar> make_foo_bar()
{
return std::make_pair(foo(), bar());
}

情報不足ですみません.これだと,make_foo_bar() から NULL を返せないので,
ダメなんですが.元のコードは以下のようになってます.

std::pair<foo, bar> *hbpair;
while ((hbpair = make_foo_bar_p()) != NULL) {
hbmap.insert(*hbpair);

delete hbpair;
}

そもそも C++ ではこういった書き方はしないものなんでしょうか?