演算子の中置記法と引数の評価順序

C++ では引数の評価順序が不定なわけだが、ここまでは、まあ、知っていた。だが、これには思い至らなかった:

中置記法

std::cout << "result of f(): " << f() << std::endl
          << "result of g(): " << g() << std::endl;

前置記法

operator << (
    operator << (
        operator << (
            operator << (
                operator << (
                    operator << (
                        std::cout,
                        "result of f(): "),
                    f()),
                std::endl),
            "result of g(): "),
        g()),
    std::endl);

そう。中置記法は前置記法の略記法に過ぎない。上記のコードで f()g() のどちらが先に評価されるかは不定なのだ。