Updated thanks to @TC
Wrapper ctor is a custom transformation template , so the standard non-template conversion sequence > overloading with Base& takes precedence. Access checks are only performed after selecting an overload - which is too late in your case.
Complete rules are complex, more can be found here , see the section "Best viable feature."
source share