libstdc++: Add poison pill for chrono::from_stream

LWG 3956 (approved in Hagenberg, February 2025) decided that from_stream
should be found *only* by ADL, not ordinary unqualified lookup. Add a
poison pill overload to chrono::__detail where the __parsable concept
and operator>>(basic_istream&, _Parser) are defined. This ensures that
when they use from_stream unqualified ordinary lookup finds the poison
pill, which is deleted, so a usable overload resolution result can only
be found by ADL.

We already have the std/time/parse/parse.cc test checking that ADL
works, so this doesn't add a new test.

libstdc++-v3/ChangeLog:

	* include/bits/chrono_io.h (chrono::__detail::from_stream): Add
	deleted function as poison pill for unqualified lookup.

Reviewed-by: Patrick Palka <ppalka@redhat.com>
This commit is contained in:
Jonathan Wakely 2025-03-06 20:23:29 +00:00 committed by Jonathan Wakely
parent b191e8bdec
commit 4b18045962
No known key found for this signature in database

View file

@ -3115,6 +3115,10 @@ namespace __detail
namespace __detail
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 3956. chrono::parse uses from_stream as a customization point
void from_stream() = delete;
template<typename _Parsable, typename _CharT,
typename _Traits = std::char_traits<_CharT>,
typename... _OptArgs>