|
|
@@ -12,7 +12,7 @@
|
|
|
#include "ptr_compare.hpp"
|
|
|
|
|
|
template <typename P>
|
|
|
-class const_propogating_ptr {
|
|
|
+class const_propogating_ptr : private detail::get_ptr<P> {
|
|
|
public:
|
|
|
using element_type = typename std::pointer_traits<P>::element_type;
|
|
|
using pointer = element_type *;
|
|
|
@@ -48,13 +48,13 @@ public:
|
|
|
return static_cast<bool>(_ptr);
|
|
|
}
|
|
|
|
|
|
- reference operator*() noexcept { return *_ptr; }
|
|
|
- pointer get() noexcept { return std::addressof(operator*()); }
|
|
|
- pointer operator->() noexcept { return get(); }
|
|
|
+ reference operator*() noexcept(noexcept(*_ptr)) { return *_ptr; }
|
|
|
+ pointer get() noexcept(noexcept(detail::get_ptr<P>::get(_ptr))) { return detail::get_ptr<P>::get(_ptr); }
|
|
|
+ pointer operator->() noexcept(noexcept(get())) { return get(); }
|
|
|
|
|
|
- const_reference operator*() const noexcept { return *_ptr; }
|
|
|
- const_pointer get() const noexcept { return std::addressof(operator*()); }
|
|
|
- const_pointer operator->() const noexcept { return get(); }
|
|
|
+ const_reference operator*() const noexcept(noexcept(*_ptr)) { return *_ptr; }
|
|
|
+ const_pointer get() const noexcept(noexcept(detail::get_ptr<P>::get(_ptr))) { return detail::get_ptr<P>::get(_ptr); }
|
|
|
+ const_pointer operator->() const noexcept(noexcept(get())) { return get(); }
|
|
|
|
|
|
private:
|
|
|
P _ptr;
|