mizvekov added a comment.

In D104500#2865849 <https://reviews.llvm.org/D104500#2865849>, @Quuxplusone 
wrote:

> @mizvekov, I don't understand what you mean by "yet another" mechanism. This 
> is just asking to restore Clang's C++98/03 extension (that supports move 
> constructors even in C++03). It's asking to //remove// special-case code you 
> added, right? Find the line where you're saying "oh but if it's C++03 then 
> //don't// do the usual rvalue lookup," and remove that.
>
> My naive guess is line 3459:
>
>   if (getLangOpts().CPlusPlus11 && !getLangOpts().CPlusPlus2b &&
>       NRInfo.isMoveEligible()) {
>
> should maybe be just
>
>   if (!getLangOpts().CPlusPlus2b && NRInfo.isMoveEligible()) {
>
> Could you look into that?

With that change, you get the full P1825 <https://reviews.llvm.org/P1825> 
implicit move in C++98, which modifies the semantics of pure C++98 programs.
Like I said in the commit message, this can change which copy constructor is 
picked, between non-const and const ones.

To continue supporting C++98, we would need to keep the old C++11 implicit move 
code around.

>> And I think libc++ is in the process of ditching support for C++98 
>> completely, though I might be mistaken about the extent here.
>
> Nope, untrue. I've been making some patches to ditch libc++'s 
> `_LIBCPP_CXX03_LANG` macro, but I'm doing that precisely because the only 
> compiler we support in C++03 mode is Clang, and on Clang we //can// actually 
> use rvalue references and variadic templates and so on, even in C++03 mode. 
> That is, this extension (that was broken by this patch) is actually //the 
> only reason libc++ works in C++03 mode at all!// So it's important to 
> preserve the extension. (And presumably there might be clients relying on the 
> extension, besides just libc++.)

Well I thought that meant exactly that libc++ does not support C++98, it only 
works on clang because it provides so much of C++11 as an extension.

I did not remove this just on my own whim by the way, the information I had and 
the reason the patch was approved as is, is because as I said, those extensions 
were considered best effort and not officially supported.
@rsmith thoughts?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D104500/new/

https://reviews.llvm.org/D104500

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to