現状の規格を読むに、どう考えてもUser Defined-Literalsは、グローバル名前空間では使えないように読める。しかし、ペーパーでは、予約語に関しては何にも触れられていないような気がする。
たとえば、n2747でも、既存の文法やCとの互換性、今後の言語の発展とどう折り合いをつけるのかしか考えられていない。どうも、誰も、アンダースコアで始まる、名前の予約の問題を考えていないのではないだろうか。実際、グローバル名前空間でオーバーロード関数の定義ができないというの仕様は、どう考えてもおかしい。いったいどうなっているのだろう。さっぱり分からない。
グローバル名前空間で予約されているのはアンダースコアで始まる名前な
ReplyDeleteわけですが、ユーザー定義リテラル演算子の「名前」は operator "" _a の
全部であって、その一部である識別子 _a はグローバル名前空間の名前とは
ならず、予約識別子の問題は関係ない。
という解釈でいかがでしょう?
これに対してダブルアンダースコアやアンダースコア後の英大文字などは
マクロ名やキーワードとして処理系が定義する可能性があるので、やはり
使えませんが。