gcc/libstdc++-v3/include
Jonathan Wakely 36313a6bce LWG 2936: update path::compare logic and optimize string comparisons
The resolution for LWG 2936 defines the comparison more precisely, which
this patch implements. The patch also defines comparisons with strings
to work without constructing a temporary path object (so avoids any
memory allocations).

	* include/bits/fs_path.h (path::compare(const string_type&))
	(path::compare(const value_type*)): Add noexcept and construct a
	string view to compare to instead of a path.
	(path::compare(basic_string_view<value_type>)): Add noexcept. Remove
	inline definition.
	* src/filesystem/std-path.cc (path::_Parser): Track last type read
	from input.
	(path::_Parser::next()): Return a final empty component when the
	input ends in a non-root directory separator.
	(path::_M_append(basic_string_view<value_type>)): Remove special cases
	for trailing non-root directory separator.
	(path::_M_concat(basic_string_view<value_type>)): Likewise.
	(path::compare(const path&)): Implement LWG 2936.
	(path::compare(basic_string_view<value_type>)): Define in terms of
	components returned by parser, consistent with LWG 2936.
	* testsuite/27_io/filesystem/path/compare/lwg2936.cc: New.
	* testsuite/27_io/filesystem/path/compare/path.cc: Test more cases.
	* testsuite/27_io/filesystem/path/compare/strings.cc: Likewise.

From-SVN: r267235
2018-12-18 15:52:33 +00:00
..
backward P0935R0 Eradicating unnecessarily explicit default constructors 2018-06-14 15:12:24 +01:00
bits LWG 2936: update path::compare logic and optimize string comparisons 2018-12-18 15:52:33 +00:00
c Update copyright years. 2018-01-03 11:03:58 +01:00
c_compatibility Update copyright years. 2018-01-03 11:03:58 +01:00
c_global cstddef: Add versioned namespace. 2018-10-24 05:20:35 +00:00
c_std Update copyright years. 2018-01-03 11:03:58 +01:00
debug re PR libstdc++/87872 (debug list::splice should not call _M_transfer_from_if on self-splices) 2018-11-06 20:20:06 +00:00
decimal Update copyright years. 2018-01-03 11:03:58 +01:00
experimental PR libstdc++/80762 avoid ambiguous __constructible_from<void, void> 2018-12-12 16:13:43 +00:00
ext PR libstdc++/88119 use alignof in std::alignment_of, not __alignof__ 2018-11-29 12:32:57 +00:00
parallel Update copyright years. 2018-01-03 11:03:58 +01:00
precompiled Add initial version of C++17 <memory_resource> header 2018-07-24 22:09:55 +01:00
profile Update copyright years. 2018-01-03 11:03:58 +01:00
std LWG 3040: define starts_with/ends_with as proposed 2018-12-18 15:34:43 +00:00
tr1 PR libstdc++/83566 - cyl_bessel_j returns wrong result for x>1000 2018-11-18 18:32:26 +00:00
tr2 PR libstdc++/87784 fix dynamic_bitset::push_back 2018-10-30 14:49:32 +00:00
Makefile.am Implement uniform container erasure for C++20. 2018-11-28 16:44:25 +00:00
Makefile.in Implement uniform container erasure for C++20. 2018-11-28 16:44:25 +00:00