Specialize only within the same namespace
Without this, on some compilers:
src/cxx.cc:252:30: error: specialization of ‘template<class T> rust::cxxbridge02::Vec<T>::Vec()’ in different namespace [-fpermissive]
rust::Vec<CXX_TYPE>::Vec() noexcept {
^
src/cxx.cc:274:3: note: in expansion of macro ‘RUST_VEC_OPS’
MACRO(u8, uint8_t)
^
src/cxx.cc:295:1: note: in expansion of macro ‘FOR_EACH_SIZED_PRIMITIVE’
FOR_EACH_SIZED_PRIMITIVE(RUST_VEC_OPS)
^
In file included from src/cxx.cc:1:0:
include/cxx.h:216:3: error: from definition of ‘template<class T> rust::cxxbridge02::Vec<T>::Vec()’ [-fpermissive]
Vec() noexcept;
^
diff --git a/src/cxx.cc b/src/cxx.cc
index 7465f56..0ead3f0 100644
--- a/src/cxx.cc
+++ b/src/cxx.cc
@@ -249,23 +249,23 @@
#define RUST_VEC_OPS(RUST_TYPE, CXX_TYPE) \
template <> \
- rust::Vec<CXX_TYPE>::Vec() noexcept { \
+ Vec<CXX_TYPE>::Vec() noexcept { \
cxxbridge02$rust_vec$##RUST_TYPE##$new(this); \
} \
template <> \
- void rust::Vec<CXX_TYPE>::drop() noexcept { \
+ void Vec<CXX_TYPE>::drop() noexcept { \
return cxxbridge02$rust_vec$##RUST_TYPE##$drop(this); \
} \
template <> \
- size_t rust::Vec<CXX_TYPE>::size() const noexcept { \
+ size_t Vec<CXX_TYPE>::size() const noexcept { \
return cxxbridge02$rust_vec$##RUST_TYPE##$len(this); \
} \
template <> \
- const CXX_TYPE *rust::Vec<CXX_TYPE>::data() const noexcept { \
+ const CXX_TYPE *Vec<CXX_TYPE>::data() const noexcept { \
return cxxbridge02$rust_vec$##RUST_TYPE##$data(this); \
} \
template <> \
- size_t rust::Vec<CXX_TYPE>::stride() noexcept { \
+ size_t Vec<CXX_TYPE>::stride() noexcept { \
return cxxbridge02$rust_vec$##RUST_TYPE##$stride(); \
}
@@ -292,4 +292,8 @@
FOR_EACH_SIZED_PRIMITIVE(RUST_VEC_EXTERNS)
} // extern "C"
+namespace rust {
+inline namespace cxxbridge02 {
FOR_EACH_SIZED_PRIMITIVE(RUST_VEC_OPS)
+} // namespace cxxbridge02
+} // namespace rust