/ 最近 .rdf 追記 編集 設定 本棚

脳log[20130408]



2013年04月08日 (月) [SakuraEditor]「PatchUnicode#377 t_min/t_max関数のinline化」■ windows.hが定義する悪名高い(らしい) min/maxマクロを回避する NOMINMAXも知らなかったぐらいなので純粋な疑問なんだけど、std::min/std::maxを t_min/t_maxに置き換えるこの変更の目的はなんだろう。windows.hに固有の NOMINMAXを付けたい/外したいわけではないみたい。コンパイラが信頼できない・コンパイラの差異を吸収したいということだろうか。標準の語彙を使用しつつダメなコンパイラを正す手段を講じる方が、読みやすいし未来に渡って使い分けが不明な std::min/std::max/t_min/t_maxが入り交じるおそれがなくていいと思うんだけど。■関数が作成されたときのコメントがあった。「2007.10.18 kobake テンプレート式 min とか max とか。どっかの標準ヘッダに、同じようなものがあった気がするけど、NOMINMAX を定義するにしても、なんだか min とか max とかいう名前だと、テンプレートを呼んでるんだかマクロを呼んでるんだか訳分かんないので、明示的に「t_~」という名前を持つ関数を用意。」t_min/t_maxという名前は、マクロでなくテンプレートの min/maxですよという意味だった。std::プレフィックスでは代わりになりませんか?■t_min/t_maxが作成された目的を否定しちゃうけど、明示的に(テンプレート)関数バージョンを使おうという人は t_min/t_maxがあろうとなかろうとマクロ引数の多重評価の罠には引っかからないと思う。そういうポカをやらかす人こそ t_min/t_maxの存在や目的に気付かず素直に min/max(マクロかもしれない!)を呼ぶだろう。