こうやって参照渡しにNULLが渡せるのは規格として正しい動作なんですか?
gcc4.1とvc8sp1両方ともこれが通って
&str is NULLが出力されます。

#include <iostream>
#include <string>

void func(std::string& str)
{
 if(&str == NULL)
 {
  std::cout << "&str is NULL" << std::endl;
 }
 
}

main()
{
 std::string *str = NULL;
 func(*str);
}