// deep.h
#ifndef DEEP_H_INCLUDED
#define DEEP_H_INCLUDED
template <typename T>
class deep_pointer
{
public:
deep_pointer();
deep_pointer(T *p);
operator T *&();
operator T const *const &() const;
T *operator->();
T const *operator->() const;
private:
T *actual_pointer;
};
template <typename T>
inline
deep_pointer<T>::deep_pointer()
{
}
template <typename T>
inline
deep_pointer<T>::deep_pointer(T *p)
: actual_pointer(p)
{
}
template <typename T>
inline
deep_pointer<T>::operator T *&()
{
return actual_pointer;
}
template <typename T>
inline
deep_pointer<T>::operator T
const *const &() const
{
return actual_pointer;
}
template <typename T>
inline
T *deep_pointer<T>::operator->()
{
return actual_pointer;
}
template <typename T>
inline
T const *deep_pointer<T>::operator->() const
{
return actual_pointer;
}
#endif