Project()ではポインタを返されるのでエラーになると思いますが、Project(引数)という定義の仕方はいってしまえばコンストラクターを直接呼び出してる処理だと思いますがなぜエラーにならないのかという疑問です。list<>::merge(list<>&)はなぜそれを使わないのかという質問です。実体であるpush_back()の引数には渡せないからです。);がエラーになるのと同じ理由です。Project(~~)をpush_backの引数に渡せます。Project(~~)は実体を返すためpush_back()の引数に渡せます。その2質問の意図をはかりかねたのでどのような動作を望んでいるのかの補足をお願いします。正確な回答をすることが出来ませんでした。[追記]C++を意識するのであればchar[]ではなくstd::stringを用いたほうが良いのでは、と思います。);が可能であることと理屈は同じ(はず)です。6年前list::mergeを使用する場合、マージ前に各listの要素がソートされている必要があります。ソートされていない場合は意図しない結果になります。Project()ではポインタを返されるのでエラーになると思いますが、Project(引数)という定義の仕方はいってしまえばコンストラクターを直接呼び出してる処理だと思いますがなぜエラーにならないのかという疑問です。new演算子は動的記憶域期間をもつオブジェクトの生成のための演算子です。*型の戻り値をもつ式です。*を渡すことはできません。)のような表現は,基本的には一時オブジェクトの生成式です。&&に渡すことが出来ます。list<>::merge(list<>&)はなぜそれを使わないのかという質問です。operator<が使われているはずですが。list::mergeはソート済みのlist同士をmergeするものです。今回の場合は,l2が未ソートなので,未定義の振る舞いとなります。2012ではデバッグ実行時に未ソートを検出してassertを吐きます。}という形をとります。operator!=は==から,operator>とoperator<=とoperator>=は<から生成することも出来ますが。比較演算子に変更は不要なので,constを付けた方がよいでしょう。operator+やoperator-が自身を書き換えるのも違和感があります。}のように書くのが常套句です。