Duplicate const generated on cxx::bridge file in C++
Thanks for your work on this useful library! Right now I'm using cxx::bridge to provide Elixir bindings for PyTorch via Rustler (https://github.com/andfoy/extorch). I'm trying to use a rust::Slice with std::shared_ptr<CrossTensor>, where CrossTensor is a C++ opaque type as follows:
/// Index a tensor using a list of tensors.
fn index(
tensor: &SharedPtr<CrossTensor>,
indices: &[&SharedPtr<CrossTensor>]
) -> Result<SharedPtr<CrossTensor>>;
Where index has the following signature:
std::shared_ptr<CrossTensor> index(
const std::shared_ptr<CrossTensor> &tensor,
rust::Slice<const std::shared_ptr<CrossTensor>&> indices);
When I try to compile the library, it seems that the code generator is producing a bridge signature with duplicate const keywords, which causes compilation errors:
::rust::repr::PtrLen cxxbridge1$index(const ::std::shared_ptr<::CrossTensor> &tensor, ::rust::Slice<const const ::std::shared_ptr<::CrossTensor> &> indices, ::std::shared_ptr<::CrossTensor> *return$) noexcept
I don't know if the &[&SharedPtr<CrossTensor>] declaration is malformed or if I should not use a slice in this case. I would appreciate any help with this issue.
This looks similar to #750. We will need to generate something like rust::Slice<const std::shared_ptr<CrossTensor> &const> (I think...).
- One
constis the one inconst shared_ptr<T> &corresponding to your&SharedPtr<T>; - The other
constis the one inrust::Slice<const T>corresponding to your&[T].
I've just opened https://github.com/dtolnay/cxx/pull/831, that should fix the duplicate const const.