main の最初の行はコンパイルされるのに、2 行目はコンパイルされないのはなぜですか? どちらも一時的なものだと思いますが、1つは左辺値として扱われ、もう1つはそうではありません..
class complex
{
   public:
     complex() : r(0),i(0) {}
     complex(double r_, double i_) : r(r_), i(i_)
    {
    }
  private:
    double r;
    double i;
 };
int main()
{
   complex(2,2) = complex(1,2);
   char() = char(2);
}