That's doubtful. What you describe should not work in Puppet 3.7 at all, neither with nor without the future parser. I did not even find a bug report that would explain why it might have seemed to work for you. Puppet 3.7's scoping rules are documented at
https://docs.puppet.com/puppet/3.7/lang_scope.html. Those docs are substantially unchanged for all v4 releases so far, and as a matter of semantic versioning, I expect them to remain substantially unchanged for all remaining v4 releases.
I could believe that the behavior you describe was exhibited by Puppet 2.7, which had very different scoping rules for variables, but the scope change was one of the major differences between Puppet 2 and Puppet 3. Not only should what you describe not work in Puppet 3 (or 4), there is no way at all in v3 or v4 of the Puppet language to access the local variables of a defined type instance, though I believe there is a function available from the stdlib module for accessing their parameters.
All that aside, the easiest solution is probably to give mainclass::myress::sub a parameter by which the wanted value from a mainclass::myress instance is provided to it.