Proposed resolution (January, 2011): Change 13.10.3 [temp.deduct] paragraph 8 as follows:
If a substitution results in an invalid type or expression, type
deduction fails. An invalid type or expression is one that would be
ill-formed if written using the substituted arguments.
[Note: Access checking is
not done as
part of the substitution process. —end note]
Consequently, when deduction succeeds, an access error could still
result when the function is instantiated. Only invalid types...
According to 13.10.3 [temp.deduct] paragraph 8, This mimics the way access checking is done in overload
resolution. However, experience has shown that this exemption
of access errors from deduction failure significantly complicates
the Standard library, so this rule should be changed.
Access checking is not done as part of the substitution
process. Consequently, when deduction succeeds, an access
error could still result when the function is instantiated.