version (CppRuntime_Clang) version = CppMangle_Itanium; version (CppRuntime_Gcc) version = CppMangle_Itanium; version (CppRuntime_Sun) version = CppMangle_Itanium; template ScopeClass(C) if (is(C == class) && __traits(getLinkage, C) == "C++") { extern(C++, class) extern(C++, __traits(getCppNamespaces,C)) extern(C++, (ns)) class ScopeClass { } } extern(C++) class Foo {} extern(C++) void test(ScopeClass!Foo) { } version(CppMangle_Itanium) { static assert (test.mangleof == "_Z4testP10ScopeClassIP3FooE"); } else version (CppRuntime_Microsoft) { version (Win32) { static assert (test.mangleof == "?test@@YAXPAV?$ScopeClass@PAVFoo@@@@@Z"); } version (Win64) { static assert (test.mangleof == "?test@@YAXPEAV?$ScopeClass@PEAVFoo@@@@@Z"); } } alias AliasSeq(T...) = T; alias ns = AliasSeq!(); immutable ns2 = AliasSeq!(); extern(C++,(ns)) class Bar {} extern(C++,) class Baz {} extern(C++, (ns2)) class Quux {}