#pragma once namespace jvalidate::detail { /** * @brief An object that acts like a pointer to an rvalue - without requiring us * to heap allocate a unique_ptr. * @tparam T the type being pointer to. */ template struct DerefProxy { T & operator*() { return value; } T const & operator*() const { return value; } T * operator->() { return &value; } T const * operator->() const { return &value; } T value; }; }