タグ

C++0xとpreprocessorに関するtyruのブックマーク (2)

  • プリプロセス時のユーザ定義リテラルについて - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    C++0x で新しく追加されるユーザ定義リテラルはアンダースコアから始まってないとダメという制約がありますが、これがコンパイル時に問題にならないということは hito さんが書いています(の虫: user defined literalが予約語の制約を無視できる理由)。 でもコンパイル時じゃなくてプリプロセス時ならどうなるの?という話です。 アンダースコア二つから始まる名前と、アンダースコアひとつに大文字から始まる名前は、当然プリプロセス時にも影響してきます。 ということは、 #define __hoge hage というのをコンパイラが予約していた場合、 "bjarne"__hoge というのをユーザが書いた場合、プリプロセス時に __hoge が置換されてしまって、意図しない結果になりそうです。 これは問題だなーとか思っていて、ぼけーっと仕様書を眺めていたのですが、こんなのを見つけま

    プリプロセス時のユーザ定義リテラルについて - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
  • タプルの要素数を数える - デ-mk6

    世間では空前のプリプロセッサブームですね! http://codepad.org/IwJ4sqA9 C++0xの規格を眺めていると、プリプロセッサのセクションに可変長引数リスト付きマクロが入っていたので、これを使って何か面白いことができないかと考えていたところ、タプルの要素数を数えることはできないだろうか、と思ったので、やってみた。gcc-4.3.3 -std=c++0x -E -Pで確認している。 タプルの要素数を数えるところはシンプルだけど、PP_IS_EMPTYはBoost.PPのものではなく、自家製。Boostのそれは、identifierか数値か空かしか識別できない(それぐらいだっけ?)。要素数不明のタプルを調べるには、いかなるトークンがコンマ区切りで何個きても識別できるようにする必要がある。で、これが異常に難しい。基はBoostのものと同じだけど、間に挟まるトークンによって展

    タプルの要素数を数える - デ-mk6
  • 1