I know if a variable is global, the you can always access its value by preceding the variable name with ::... but is there a way to access the value of a local
I don't think so. Unless the shadowed variable is a global variable, a variable in another namespace or a member variable of the class or of any of its ancestors or of any other class, it remains inaccessible.
There might be some compiler-specific trickery with the using keyword, but I wouldn't trust it.
By the way, using is very useful if you accidentally "shadow" a method in a subclass with a method of the same name but different signature.