50 template <
typename T,
typename SHARED_IMLP = shared_ptr<T>,
typename COPIER = SharedByValue_CopyByDefault<T, SHARED_IMLP>>
127 using element_type =
typename TRAITS::element_type;
128 using element_copier_type =
typename TRAITS::element_copier_type;
129 using shared_ptr_type =
typename TRAITS::shared_ptr_type;
132 static_assert (same_as<T, typename TRAITS::element_type>);
152 explicit
SharedByValue (const element_type& from, const element_copier_type& copier = element_copier_type{})
noexcept;
153 explicit SharedByValue (
const shared_ptr_type& from,
const element_copier_type& copier = element_copier_type{})
noexcept;
154 explicit SharedByValue (shared_ptr_type&& from,
const element_copier_type&& copier = element_copier_type{})
noexcept;
155 explicit SharedByValue (element_type* from,
const element_copier_type& copier = element_copier_type{});
160 nonvirtual
SharedByValue& operator= (shared_ptr_type&& from)
noexcept;
161 nonvirtual
SharedByValue& operator= (
const shared_ptr_type& from)
noexcept;
166 nonvirtual
explicit operator bool () const noexcept;
175 nonvirtual shared_ptr_type
cget_ptr () const;
184 template <typename COPIER>
185 nonvirtual shared_ptr_type
rwget_ptr (COPIER&& copier);
197 nonvirtual element_type*
rwget ();
198 template <typename COPIER>
199 nonvirtual element_type*
rwget (COPIER&& copier);
209 nonvirtual const element_type*
cget () const noexcept;
222 nonvirtual const element_type* operator->() const;
223 nonvirtual element_type* operator->();
229 nonvirtual const element_type& operator* () const;
234 constexpr
bool operator== (nullptr_t) const;
239 nonvirtual element_copier_type GetDefaultCopier () const;
255 nonvirtual
bool unique () const;
263 nonvirtual
unsigned int use_count () const;
266 [[no_unique_address]] element_copier_type fCopier_;
267 shared_ptr_type fSharedImpl_;
278 template <typename COPIER>
283 template <typename COPIER>
284 nonvirtual
void BreakReferences_ (COPIER&& copier);