How can I cast a boost::shared_array<char> to boost::shared_array<const char>?
Since shared_array has no add_ref method you could emulate it as follows:
struct MagicDeleter {
  MagicDeleter( boost::shared_array<char> ptr ) : ptr(ptr) {};
  template<typename T> void operator()(T*) {} 
protected:
  boost::shared_array<char> ptr;
};
...
boost::shared_array<char> orig_ptr( some_val );
boost::shared_array<const char> new_ptr( orig_ptr.get(), MagicDeleter(orig_ptr) );
                        The other answers are correct, you can't and you shouldn't.
Besides, are you sure you want a boost::shared_array<const char> and not a const boost::shared_array<char>? 
Practically, this works:
boost::shared_array<char> acz;
boost::shared_array<const char>& acz2 = reinterpret_cast< boost::shared_array<const char>& >(acz);
BUT it is not a good idea and only works if boost::shared_array and boost::shared_array have the same implementation. Templates can be partially specialized:
template<class T>
struct TwoImplementations {
    int m_nIntMember;
};
template<>
struct TwoImplementations< const T > {
    double m_fDoubleMember;
};
Doing a reinterpret cast between TwoImplementations<int> and TwoImplementations<const int> is just wrong. 
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With