C++0x inline namespace
inline namespace と書くことで、その名前空間は透過的になり
異なる名前空間でも特殊化できるようになる
namespace Lib { inline namespace Lib_1 { template <class T> class A; } template <class T> void g(T); } struct MyClass {}; namespace Lib { template <> class A<MyClass> {}; } int main() { Lib::A<MyClass> a; // OK g(a); return 0; }
C++98 と C++0x のライブラリを共存させるための拡張らしいが、共存のさせ方がわからない
※追記
C++98とC++0xのライブラリの共存というのは、TR1ライブラリがstd::tr1名前空間になってるのをstd名前空間としても使えるようにする、ということみたいです。
namespace std { inline namespace tr1 { template <class T> class shared_ptr; } } std::shared_ptr<int> p1; // OK std::tr1::shared_ptr<int> p2; // OK
N2535 Namespace Association ("inline namespace")