win: Fix unqualified lookups into dependent base classes.
commit5a42d4c0508d24c05d7ade90d50d34f6f3b8116f
authorthakis <thakis@chromium.org>
Tue, 14 Jul 2015 01:43:11 +0000 (13 18:43 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 14 Jul 2015 01:45:02 +0000 (14 01:45 +0000)
tree440d71ce1434392a36d1859bfaabdecab59e81e0
parentdf8bf5b2332b26197fd217d7af6e42744ae9857e
win: Fix unqualified lookups into dependent base classes.

C++ differentiates between dependent and non-dependent lookups.  Dependent
lookups depend on a template parameter and are resolved at
end-of-translation unit, when templates are instantiated.  Non-dependent
("normal") lookups are done immediately.

If a class has a template superclass and tries to access a member from the
parent, then if this is written "ptr_", it looks like a non-dependent lookup
to the compiler, but since the superclass is a template and not instantiated
yet, the lookup wouldn't find anything.  (This is a bit handwavy.)  Hence,
the standard requires to make it clear to the compiler that ptr_ is a dependent
lookup.  This can be done by prefixing it with "T::" or something similar that's
obviously dependent on the template parameter, or with "this->" (this implicitly
depends on T).

cl.exe doesn't implement this rule, so clang-cl also looks the other way and
tries to make things work, but it's not strictly standards-conformant. This
CL fixes that.

No intended behavior change.
See http://eli.thegreenplace.net/2012/02/06/dependent-name-lookup-for-c-templates
for more details.

Fixes several warnings that look like

..\..\sandbox\win\src\service_resolver_unittest.cc(46,5) :  warning(clang):
        use of undeclared identifier 'target_'; unqualified lookup
        into dependent bases of class template 'ResolverThunkTest'
        is a Microsoft extension [-Wmicrosoft]
    target_ = fake_target_;
    ^
    this->

BUG=504657

Review URL: https://codereview.chromium.org/1237533002

Cr-Commit-Position: refs/heads/master@{#338616}
base/win/scoped_comptr.h
sandbox/win/src/service_resolver_unittest.cc