フォームの識別子の先例は、(§20.8.9.1.3)_<number>
の関数引数プレースホルダー オブジェクト メカニズムでstd::placeholders
あり、そのようなシンボルの実装定義の数を定義します。
これは、ユーザーが#define
そのフォームの識別子を取得できないことを意味するため、良いことです。§17.6.4.3.1/1:
標準ライブラリ ヘッダーを含む翻訳単位は、標準ライブラリ ヘッダーで宣言された #define または #undef 名を使用してはなりません。
ユーザー定義のリテラル関数の名前はoperator "" _123
、単に_123
ではなく であるため、using namespace std::placeholders;
.
operator "" _baseconv
ただし、私の 2¢ は、 を使用して、リテラル内のベースをエンコードする方がよいということです"123123_4"_baseconv
。
編集: ヨハネスの(削除された)回答を見ると、実装によって_123
マクロとして使用される懸念がある可能性があります。これは確かに理論の領域です。このようなプリプロセッサの使用によって実装が得られるものはほとんどないからです。さらに、私が間違っていなければ、これらのシンボルをそれ自体ではなく で非表示にする理由は、Boost Bind を含めるなどして、そのような名前がユーザーによって使用される可能性が高いためです (名前付きの名前空間)。std::placeholders
std
トークンは実装でグローバルに使用するために予約されておらず (17.6.4.3.2)、それらの使用には先例があるため、少なくとも、forward
.