名前空間に何があったのか
この記事は、C++ Advent Claneder2014の14日の参加記事です。
良い機会なのでmarkdown形式で書けるはてなブログに移行テストです。
C++の名前空間は使い辛い
namespace Hoge::Fuga { ... }
のように書けるようにならないんですかねー」と、ほっとさん(@hotwatermorning)に
言っていて、その度に「それ微妙じゃないですか」と軽くあしらわれていたんですが、
Nested Namespace DefinitionとしてついにC++17に入ることになったようです。
やったー!
Nested Namespace Definition
後述する最新のN4230から抜粋すると、以下のような単純な機能になります。
namespace A::B::C { //… }
上記のコードは次のものと同等になる
namespace A { namespace B { namespace C { //… } } }
この機能については江添さんのレビューにもちらっと載っています
本の虫: 2014-10-pre-Urbanaのレビュー: N4230-N4239
採択されるまでの長い経緯
実はこのNested Namespace Definitionさん、 大昔に1度提案されていたものの忘れ去られていた機能なのです。
2003/09/19 n1524:Nested Namespace Definition Proposal - Open Standards http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1524.htm
11年も前ですね。それが去年、10年ぶりに掘り起こされています。 順調にいけばTR1辺りで入ってたんじゃないかなーって思ってます。
2013/09/10 What ever happened to N1524(nested namespace qualifiers)? https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/AfRGjcaSoXs
本当に何が起こったのでしょうね。 そして、今年の3月になって再びRobert Kawulak氏によって提案される事となります。
2014/03/30 Recall: Nested namespace definition proposal ( ISO C++ Standard - Future Proposals )
https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/BIL8OQyfEk0
この再提出された提案によるとN1524は、N2869 State of C++ Evolutionの "EWGで議論されてたけどさまざまな理由でC++11からは外しちゃったよリスト" に含まれてしまったため、C++0x(現在のC++11)の標準機能としては見送られてしまった事が分かります。 2003年に提出されてから担当者の多忙などの理由により放置されちゃったんでしょう。 各方面からの要望も最近多くなってきたので、それがこの提案提出の動機となったようです (あとはC#のような言語で実装されていたり、Lazy C++というツールで既に実装事例があったから…と書いていますが)
2014/05/23 n4026:Nested namespace definition - Open Standards http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4026.html
そしてついに今年5月、初期案がOpen Standardsに登録されました。
2014/07/03 n4116:Nested Namespace Definition(rev1) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4116.pdf
7月にスイスのRapperswilにて行われた標準C++委員会のミーティングが行われた後、N4116が登録されています。
2014/10/10 n4230:Nested namespace definition (revision 2) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4230.html
10月にrev2となっており、これが2014-12-14時点での最新の提案となります。 Pre-Urvanaに分類されているので、11月に行われたイリノイ州Urvanaでのミーティング用みたいですね。
このような感じで、実際に採択されるまでに10年以上の年月がかかっているわけですが、 Future ProposalsのMLを見ていると、途中で議論が途切れて放置されていたりするものも結構ありますし、 比較的緩いのかなーと感じておりました。 実際の話し合いは定期的に開催されるC++標準委員会のミーティングで行われると思うのですが、 こちらからは動向が分からないのでもどかしいところでもあります。
それでは、お次のAdvent Calenderはbjam大好きFlast_ROさんです。