forall(T) struct wrap { T val; }; forall(T) T *? (wrap(T) rhs) { return rhs.val; } int main(int argc, char const *argv[]) { wrap(int) test; test.val = 3; int i = *test; return 0; }