[cfe-dev] MS/Borland portability and 2-phase lookup

Douglas Gregor dgregor at apple.com
Fri Mar 4 13:27:04 PST 2011


On Mar 4, 2011, at 12:08 AM, Eric Niebler wrote:

> We have a portability problem compiling old code for MS/Borland with
> clang: 2-phase lookup. Those compilers don't do it, so they accept code
> that clang rejects. For example:
> 
> template<class X>
> struct S {
>  int i;
> };
> 
> template<class Y>
> struct T {
>  T() {
>    i = 0; // ERROR, should be T::i or this->i
>  }
> };

Presumably, you meant to inherit T from Y, or S<Y>, or something dependent.

> Clang correctly diagnoses this problem, which presents a problem for old
> broken code that compiles OK with MS and Borland. This problem appears
> to be quite widespread.
> 
> Would there be any interest in a patch that turns off 2-phase lookup
> when in MS/Borland compatibility mode
> (-fms-extensions/-fborland-extensions)? If so, I can see about providing
> one.

The *ideal* way to handle this would be to improve Clang's error recovery to the point where we could just warn that there is a two-phase name lookup issue here (with Fix-Its, naturally). Then, we don't have any special magic for MS/Borland compatibility modes.

  - Doug



More information about the cfe-dev mailing list