Use alias this if you want implicit conversions too. Proxy keeps the types separate void foo(Base b) { } struct Modified { Base b; alias b this; } foo(Modified()); //works That wouldn't work if it was proxied though, which you sometimes want to force everything to go through your modification.