#include template struct wrap; template constexpr auto is_wrap_v = false; template constexpr auto is_wrap_v> = true; template struct wrap { auto operator->() { if constexpr (is_wrap_v) { return value.operator->(); } else { return &value; } } T value; }; struct vec2 { float x, y; }; auto hello(wrap>> w) { return w->x + w->y; }