[RFC] Deprecate non-standard constructors in std::pair
Jonathan Wakely
jwakely@redhat.com
Wed Apr 28 17:11:19 GMT 2021
On 28/04/21 18:00 +0100, Jonathan Wakely wrote:
>On 28/04/21 17:57 +0100, Jonathan Wakely wrote:
>>On 07/04/21 17:59 +0100, Jonathan Wakely wrote:
>>>On 07/04/21 13:46 +0100, Jonathan Wakely wrote:
>>>>On 07/04/21 15:41 +0300, Ville Voutilainen via Libstdc++ wrote:
>>>>>On Wed, 7 Apr 2021 at 15:31, Jonathan Wakely via Libstdc++
>>>>><libstdc++@gcc.gnu.org> wrote:
>>>>>>I propose that we deprecate the constructors for C++11/14/17/20 in
>>>>>>stage 1, and do not support them at all in C++23 mode once P1951 is
>>>>>>supported. I have a patch which I'll send in stage 1 (it also uses
>>>>>>C++20 concepts to simplify std::pair and fix PR 97930).
>>>>>>
>>>>>>After a period of deprecation we could remove them, and support P1951
>>>>>>for -std=gnu++11/14/17/20 too so that {} continues to work.
>>>>>
>>>>>The proposal sounds good to me.
>>>>
>>>>Thanks. I've created https://gcc.gnu.org/PR99957 so I don't forget.
>>>
>>>Here's a patch to implement it, for stage 1.
>>>
>>> libstdc++: Deprecate non-standard std::pair constructors [PR 99957]
>>>
>>> This deprecates the non-standard std::pair constructors that support
>>> construction from an rvalue and a literal zero used as a null pointer
>>> constant. We can't just add the deprecated attribute to those
>>> constructors, because they're currently used by correct code when they
>>> are a better match than the constructors required by the standard e.g.
>>>
>>> int i = 0;
>>> const int j = 0;
>>> std::pair<int, int> p(i, j); // uses pair(U1&&, const int&)
>>>
>>> This patch adjusts the parameter types and constraints of those
>>> constructors so that they only get used for literal zeros, and the
>>> pair(U1&&, U2&&) constructor gets used otherwise. Once they're only used
>>> for initializations that should be ill-formed we can add the deprecated
>>> attribute.
>>>
>>> The deprecated attribute is used to suggest that the user code uses
>>> nullptr, which avoids the problem of 0 deducing as int instead of a null
>>> pointer constant.
>>
>>
>>I've pushed this to trunk, after testing on powerpc64le-linux.
>
>And here's the wwwdocs patch announcing the deprecation.
And the inevitable html validation fix.
Pushed to wwwdocs.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.txt
Type: text/x-patch
Size: 1250 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20210428/e060bac1/attachment.bin>
More information about the Libstdc++
mailing list