[cfe-commits] r60900 - in /cfe/trunk: include/clang/Parse/Ownership.h

Howard Hinnant hhinnant at apple.com
Fri Dec 12 15:24:01 PST 2008


On Dec 12, 2008, at 6:14 PM, Sebastian Redl wrote:

>
> On Fri, 12 Dec 2008 17:32:04 -0500, steve naroff <snaroff at apple.com>  
> wrote:
>> On Dec 12, 2008, at 4:52 PM, Howard Hinnant wrote:
>>
>>> I'm afraid I don't have access to Windows.  Is there a compiler
>>> switch you could try that is along the lines of "stress conformance
>>> instead of backwards compatibility"?
>>>
>>
>> I'm not aware of any.
>
> Try /Za. However, if anything in LLVM includes <windows.h>, that won't
> work, because in a case of grotesque idiocy by the various MS teams
> involved in this, windows.h won't compile under /Za. MS never  
> bothered to
> implement #pragma system_header either.
> Or, at least this was the case in VS.Net 2003. Maybe in 2005 it's
> different.
>
>> Since you are familiar with this specific C++
>> idiom, you might try Googling for some info. I'd do it myself,  
>> however
>> I'm not as plugged into the history of this particular C++ idiom (so
>> you'd likely have more success finding the right stuff:-)
>
> I've downloaded VS Express 2008, but CMake's site is down, so I can't
> compile the project at this time. (Also, it's late and I need to go to
> bed.)
>
> My guess is that this fails because VS allows a temporary to bind to a
> non-const reference. This means that the hidden non-const copy  
> constructor
> is suddenly preferred over the conversion to the mover followed by
> initialization through the mover constructor. Since the non-const copy
> constructor is private, this fails. (And the equivalent for the  
> assignment
> operators.)

Yup.   They give a warning...

http://msdn.microsoft.com/en-us/library/0eestyah(VS.80).aspx


> I have some ideas for a workaround, but I need a working compilation
> environment first. Are there instructions for compiling the thing  
> with VC++
> written up somewhere? I can follow the instructions for LLVM itself,  
> but I
> don't know what to do with Clang.
> If there are no instructions, can you write something up, please?

After you get some rest, here's a long shot:

     ASTOwningResult& operator =(volatile ASTOwningResult&); // DO NOT  
IMPLEMENT

However I suspect if they don't respect bind an rvalue to A&, they  
aren't going to respect not binding to a volatile either.

-Howard




More information about the cfe-commits mailing list