Commit Graph

1168 Commits

Author SHA1 Message Date
Edward Smith-Rowland eda0ab6ec6 Rollback bad commits! Sorry!
From-SVN: r260003
2018-05-07 16:13:48 +00:00
Edward Smith-Rowland b118dfdb6d Revert 20001.
From-SVN: r260002
2018-05-07 16:02:46 +00:00
Jonathan Wakely d6ed6b074f PR libstdc++/85642 fix is_nothrow_default_constructible<optional<T>>
Add missing noexcept keyword to default constructor of each
_Optional_payload specialization.

	PR libstdc++/85642 fix is_nothrow_default_constructible<optional<T>>
	* include/std/optional (_Optional_payload): Add noexcept to default
	constructor. Re-indent.
	(_Optional_payload<_Tp, true, true, true>): Likewise. Add noexcept to
	constructor for copying disengaged payloads.
	(_Optional_payload<_Tp, true, false, true>): Likewise.
	(_Optional_payload<_Tp, true, true, false>): Likewise.
	(_Optional_payload<_Tp, true, false, false>): Likewise.
	* testsuite/20_util/optional/cons/85642.cc: New.
	* testsuite/20_util/optional/cons/value_neg.cc: Adjust dg-error lines.

From-SVN: r259928
2018-05-04 09:57:23 +01:00
Jonathan Wakely 1ee021f2f3 PR libstdc++/84769 qualify call to std::get<0>
PR libstdc++/84769
	* include/std/variant (visit): Qualify std::get call.

From-SVN: r259902
2018-05-03 19:58:04 +01:00
Jonathan Wakely d49b342694 PR libstdc++/84535 constrain std::thread constructor
The standard requires that the std::thread constructor is constrained so
it can't be called with a first argument of type std::thread. The
current implementation only meets that requirement if the constructor is
called with one argument, by using deleted overloads. This uses an
enable_if constraint to enforce the requirement for any number of
arguments.

Also add a static assertion to give a more readable error for invalid
arguments that cannot be invoked. Also simplify _Invoker to reduce the
error cascade for ill-formed instantiations with non-invocable
arguments.

	PR libstdc++/84535
	* include/std/thread (thread::__not_same): New SFINAE helper.
	(thread::thread(_Callable&&, _Args&&...)): Add SFINAE constraint that
	first argument is not a std::thread. Add static assertion to check
	INVOKE expression is valid.
	(thread::thread(thread&), thread::thread(const thread&&)): Remove.
	(thread::_Invoke::_M_invoke, thread::_Invoke::operator()): Use
	__invoke_result for return types and remove exception specifications.
	* testsuite/30_threads/thread/cons/84535.cc: New.

From-SVN: r259893
2018-05-03 15:08:36 +01:00
Jonathan Wakely 9e3ef54287 Use std::invoke_result in std::async instead of std::result_of
* include/std/future (__async_result_of): Use __invoke_result instead
	of result_of.

From-SVN: r259888
2018-05-03 13:40:15 +01:00
Jonathan Wakely 6791489ee5 Define std::remove_cvref and std::remove_cvref_t for C++2a
Also define __remove_cvref_t for internal use before C++2a.

	* include/std/any (any_cast): Use __remove_cvref_t.
	* include/std/tuple (__make_tuple): Likewise.
	* include/std/type_traits (__remove_cvref_t): Define.
	(__result_of_memobj, __result_of_memfun): Use __remove_cvref_t.
	[__cplusplus > 201703L] (remove_cvref, remove_cvref_t): Define.
	* include/std/variant (__erased_hash): Use __remove_cvref_t.

From-SVN: r259887
2018-05-03 13:40:10 +01:00
Jonathan Wakely 1b749ae95e PR libstdc++/83860 avoid dangling references in valarray closure types
Store nested closures by value not by reference, to prevent holding
invalid references to temporaries that have been destroyed. This
changes the layout of the closure types, so change their linkage names,
but moving them to a different namespace.

	PR libstdc++/57997
	PR libstdc++/83860
	* include/bits/gslice_array.h (gslice_array): Define default
	constructor as deleted, as per C++11 standard.
	* include/bits/mask_array.h (mask_array): Likewise.
	* include/bits/slice_array.h (slice_array): Likewise.
	* include/bits/valarray_after.h (_GBase, _GClos, _IBase, _IClos): Move
	to namespace __detail.
	(_GBase::_M_expr, _IBase::_M_expr): Use _ValArrayRef for type of data
	members.
	* include/bits/valarray_before.h (_ValArrayRef): New helper for type
	of data members in closure objects.
	(_FunBase, _ValFunClos, _RefFunClos, _UnBase, _UnClos, _BinBase)
	(_BinBase2, _BinBase1, _BinClos, _SBase, _SClos): Move to namespace
	__detail.
	(_FunBase::_M_expr, _UnBase::_M_expr, _BinBase::_M_expr1)
	(_BinBase::_M_expr2, _BinBase2::_M_expr1, _BinBase1::_M_expr2)
	(_SBase::_M_expr): Use _ValArrayRef for type of data members.
	* include/std/valarray (_UnClos, _BinClos, _SClos, _GClos, _IClos)
	(_ValFunClos, _RefFunClos): Move to namespace __detail and add
	using-declarations to namespace std.
	* testsuite/26_numerics/valarray/83860.cc: New.

From-SVN: r259844
2018-05-02 17:41:46 +01:00
Jonathan Wakely 970d3d9011 Add another workaround to std::variant for Clang bug 31852
* include/std/variant (_VARIANT_RELATION_FUNCTION_TEMPLATE): Qualify
	__get calls to avoid ADL and avoid ambiguity due to Clang bug.

From-SVN: r259135
2018-04-05 17:59:13 +01:00
Jonathan Wakely c73847e77b PR libstdc++/85183 fix std::variant move-assignment
PR libstdc++/85183
	* include/std/variant (_Move_assign_base::operator=): Fix incorrect
	value categories.
	* testsuite/20_util/variant/85183.cc: New.

From-SVN: r259059
2018-04-04 00:03:07 +01:00
Jonathan Wakely aafaa3254e Add workaround to std::variant for Clang bug 31852
* include/std/variant (__get): Qualify calls to avoid ADL.
	(__select_index): Adjust whitespace.
	(variant): Add using-declaration to workaround Clang bug.

From-SVN: r258854
2018-03-26 14:09:10 +01:00
François Dumont 5dfb5e5be8 re PR libstdc++/84998 (std::hash<std::bitset<N>> fails in Debug Mode)
2018-03-20  François Dumont  <fdumont@gcc.gnu.org>

	PR libstdc++/84998
	* include/bits/stl_bvector.h: Fix std::hash friend declaration.
	* include/std/bitset: Likewise.
	* include/bits/stl_map.h (std::map<>): Fix _Rb_tree_merge_helper friend
	declaration.
	* include/bits/stl_multimap.h (std::multimap<>): Likewise.
	* include/bits/stl_multiset.h (std::multiset<>): Likewise.
	* include/bits/stl_set.h (std::set<>): Likewise.
	* include/bits/unordered_map.h (std::unordered_map<>): Fix
	_Hash_merge_helper friend declaration.
	(std::unordered_multimap<>): Likewise.
	* include/bits/unordered_set.h (std::unordered_set<>): Likewise.
	(std::unordered_multiset<>): Likewise.

From-SVN: r258693
2018-03-20 21:45:14 +00:00
Jonathan Wakely 5dbbf8991d PR libstdc++/84769 qualify std::get and std::get_if to avoid ADL
PR libstdc++/84769
	* include/std/variant (get<_Tp, _Types...>, get_if<_Tp, _Types...>):
	Qualify calls to get<_Np, Types...> and get_if<_Np, _Types...>.

From-SVN: r258376
2018-03-09 01:10:02 +00:00
Ville Voutilainen 447346e465 re PR libstdc++/84601 (std::optional<std::pair<int, int>> is not assignment copyable)
PR libstdc++/84601
* include/std/optional (_Optional_payload): Split into multiple
specializations that can handle different cases of trivial or
non-trivial assignment operators.
* testsuite/20_util/optional/84601.cc: New.
* testsuite/20_util/optional/cons/value_neg.cc: Adjust.

From-SVN: r258304
2018-03-06 23:43:03 +02:00
Ville Voutilainen 23c3a05908 Implement the missing bits of LWG 2769
* include/std/any (any_cast(const any&)): Add static_assert.
(any_cast(any&)): Likewise.
(any_cast(any&&)): Likewise, and remove the handling
for copyable-but-not-movable type.
* testsuite/20_util/any/misc/any_cast.cc: Adjust.
* testsuite/20_util/any/misc/any_cast_neg.cc: Likewise, and
add new tests.

From-SVN: r258031
2018-02-27 13:33:30 +02:00
Jonathan Wakely cc53514672 PR libstdc++/84532 prevent unwrapping of reference_wrapper arguments
PR libstdc++/84532
	* include/std/thread (thread::__make_invoker): Construct tuple
	directly instead of using make_tuple.
	* testsuite/30_threads/async/84532.cc: New.
	* testsuite/30_threads/thread/84532.cc: New.

From-SVN: r257956
2018-02-23 23:23:43 +00:00
Jonathan Wakely 73ebece382 PR libstdc++/83658 fix exception-safety in std::any::emplace
PR libstdc++/83658
	* include/std/any (any::__do_emplace): Only set _M_manager after
	constructing the contained object.
	* testsuite/20_util/any/misc/any_cast_neg.cc: Adjust dg-error line.
	* testsuite/20_util/any/modifiers/83658.cc: New test.

From-SVN: r257141
2018-01-29 12:33:32 +00:00
Jonathan Wakely b0e63d9483 PR libstdc++/83830 Define std::has_unique_object_representations_v
PR libstdc++/83830
	* include/std/type_traits (has_unique_object_representations_v): Add
	variable template.
	* testsuite/20_util/has_unique_object_representations/value.cc: Check
	variable template.

From-SVN: r256701
2018-01-15 15:02:01 +00:00
Ville Voutilainen c89f2d2468 Make optional conditionally trivially_{copy,move}_{constructible,assignable}
* include/std/optional (_Optional_payload): Fix the comment in
the class head and turn into a primary and one specialization.
(_Optional_payload::_M_engaged): Strike the NSDMI.
(_Optional_payload<_Tp, false>::operator=(const _Optional_payload&)):
New.
(_Optional_payload<_Tp, false>::operator=(_Optional_payload&&)):
Likewise.
(_Optional_payload<_Tp, false>::_M_get): Likewise.
(_Optional_payload<_Tp, false>::_M_reset): Likewise.
(_Optional_base_impl): Likewise.
(_Optional_base): Turn into a primary and three specializations.
(optional(nullopt)): Change the base init.
* testsuite/20_util/optional/assignment/8.cc: New.
* testsuite/20_util/optional/cons/trivial.cc: Likewise.
* testsuite/20_util/optional/cons/value_neg.cc: Adjust.

From-SVN: r256694
2018-01-15 13:32:24 +02:00
Jonathan Wakely 32489ab56a PR libstdc++/83607 specialize Boyer-Moore searchers for std::byte
PR libstdc++/83607
	* include/std/functional (__is_byte_like): New trait.
	(__is_std_equal_to): Remove.
	(__boyer_moore_base_t): Use __is_byte_like instead of
	__is_std_equal_to.
	* include/experimental/functional (__is_std_equal_to): Remove.
	(__boyer_moore_base_t): Use __is_byte_like instead of
	__is_std_equal_to.
	* testsuite/20_util/function_objects/83607.cc: New test.

From-SVN: r256231
2018-01-04 10:21:29 +00:00
Ville Voutilainen 8bdbeed1d0 Protect optional's deduction guide with the feature macro
* include/std/optional: Use the feature macro.

From-SVN: r256185
2018-01-03 22:33:10 +02:00
Jakub Jelinek 85ec4feb11 Update copyright years.
From-SVN: r256169
2018-01-03 11:03:58 +01:00
Jonathan Wakely 83fd5e73b3 PR libstdc++/68519 use native duration to avoid rounding errors
PR libstdc++/68519
	* include/std/condition_variable (condition_variable::wait_for):
	Convert duration to native clock's duration before addition.
	* testsuite/30_threads/condition_variable/members/68519.cc: New test.

From-SVN: r255665
2017-12-14 20:41:52 +00:00
Jonathan Wakely 00677c4877 PR libstdc++/83427 detect weak result type from noexcept functions
PR libstdc++/83427
	* include/bits/refwrap.h (_Maybe_unary_or_binary_function): Move here
	from <bits/std_function.h>.
	(_Mem_fn_traits_base, _Mem_fn_traits): Move here, from <functional>.
	(_Weak_result_type_impl, _Reference_wrapper_base): Deduce noexcept
	for function types. Remove partial specializations for member
	functions.
	(_Weak_result_type_impl): Remove unused partial specializations for
	non-referenceable function types and for references to functions.
	(_Weak_result_type_memfun, _Reference_wrapper_base_memfun): New
	helpers to handle member functions via _Mem_fn_traits.
	(_Weak_result_type, reference_wrapper): Derive from new helpers.
	* include/bits/std_function.h (_Maybe_unary_or_binary_function): Move
	to <bits/refwrap.h>.
	* include/std/functional (_Pack, _AllConvertible, _NotSame): Remove.
	(_Mem_fn_traits_base, _Mem_fn_traits): Move to <bits/refwrap.h>.
	* testsuite/20_util/bind/83427.cc: New test.
	* testsuite/20_util/bind/refqual.cc: Add noexcept to functions and
	check for weak result types.
	* testsuite/20_util/reference_wrapper/83427.cc: New test.

From-SVN: r255651
2017-12-14 17:18:22 +00:00
Jonathan Wakely 3ca652c199 PR libstdc++/59568 fix error handling for std::complex stream extraction
PR libstdc++/59568
	* include/std/complex (operator>>): Implement proposed resolution to
	LWG 2714. Use putback if and only if a character has been successfully
	extracted but isn't a delimiter. Use ctype::widen and traits::eq when
	testing if extracted characters match delimiters.
	* testsuite/26_numerics/complex/dr2714.cc: New test.

From-SVN: r255608
2017-12-13 17:02:14 +00:00
Jonathan Wakely 91d01b33e8 PR libstdc++/83395 fix invocable traits for INVOKE<cv void>
PR libstdc++/83395
	* include/std/type_traits (__is_invocable_impl): Remove partial
	specialization for INVOKE<void> and restore is_void<R> check in
	primary template.
	(__is_nt_invocable_impl): Likewise.
	* testsuite/20_util/is_invocable/83395.cc: New test.
	* testsuite/20_util/is_nothrow_invocable/83395.cc: New test.

From-SVN: r255584
2017-12-12 17:42:19 +00:00
Jonathan Wakely 9ed83a33c0 Fix -Wunused warnings in libstdc++ headers
* config/io/basic_file_stdio.h (__basic_file): Remove name of unused
	parameter.
	* include/bits/boost_concept_check.h: Add pragmas to disable
	-Wunused-local-typedef warnings.
	* include/bits/codecvt.h (codecvt_byname<char16_t, char, mbstate_t>)
	(codecvt_byname<char32_t, char, mbstate_t>): Remove name of unused
	parameter.
	* include/bits/locale_facets_nonio.tcc (time_get::do_get_weekday)
	(time_get::do_get_monthname, time_get::do_get_year): Remove unused
	variables.
	* include/std/bitset (_Base_bitset<0>::_M_getword): Remove name of
	unused parameter.
	* include/std/streambuf (_IsUnused): Define.
	(basic_streambuf::imbue, basic_streambuf::pbackfail)
	(basic_streambuf::overflow): Add macro to unused parameters.
	* testsuite/24_iterators/operations/prev_neg.cc: Adjust dg-error.

From-SVN: r255391
2017-12-04 23:07:39 +00:00
Jonathan Wakely ad8fda29e6 Fix narrowing conversions in string_view types
* include/experimental/string_view (basic_string_view::_S_compare):
	Use value-init so narrowing conversions are not ill-formed.
	* include/std/string_view (basic_string_view::_S_compare): Likewise.

From-SVN: r255321
2017-12-01 16:10:31 +00:00
Jonathan Wakely f03858e51d Disable -Wliteral-suffix for standard UDLs
* include/bits/basic_string.h (operator""s): Add pragmas to disable
	-Wliteral-suffix warnings.
	* include/experimental/string_view (operator""sv): Likewise.
	* include/std/chrono (operator""h, operator""min, operator""s)
	(operator""ms, operator""us, operator""ns): Likewise.
	* include/std/complex (operator""if, operator""i, operator""il):
	Likewise.
	* include/std/string_view (operator""sv): Likewise.
	* testsuite/20_util/duration/literals/range.cc: Adjust dg-error.

From-SVN: r255320
2017-12-01 16:10:25 +00:00
Jonathan Wakely 352111c5b1 Add noexcept to std::integral_constant members
* include/std/type_traits (integral_constant): Make member functions
	noexcept (LWG 2346).
	* include/std/utility (integer_sequence): Likewise.

From-SVN: r255312
2017-12-01 15:09:57 +00:00
Stephan Bergmann 0f42ffd7f7 Add missing noexcept in string_view::find_first_of declaration
2017-11-27  Stephan Bergmann  <sbergman@redhat.com>

	* include/std/string_view (basic_string_view::find_first_of): Add
	missing noexcept.

From-SVN: r255176
2017-11-27 19:43:40 +00:00
Jonathan Wakely d69f1ec7d1 Add [[nodiscard]] attribute to C++17 components
* include/bits/fs_path.h (path::empty): Add nodiscard attribute.
	* include/bits/range_access.h (empty): Likewise.
	* include/std/string_view (basic_string_view::empty): Likewise.
	* testsuite/21_strings/basic_string_view/capacity/empty_neg.cc: New
	test.
	* testsuite/24_iterators/range_access_cpp17_neg.cc: New test.
	* testsuite/27_io/filesystem/path/query/empty_neg.cc: New test.

From-SVN: r255124
2017-11-23 22:11:21 +00:00
Jonathan Wakely 4b9840f230 PR libstdc++/83134 Ensure std::__not_ converts B::value to bool
PR libstdc++/83134
	* include/std/type_traits (__not_): Explicitly convert to bool.
	* testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error.
	* testsuite/20_util/logical_traits/83134.cc: New test.
	* testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
	dg-error.
	* testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
	Likewise.

From-SVN: r255122
2017-11-23 21:35:27 +00:00
François Dumont e324f9cb92 streambuf_iterator.h (istreambuf_iterator<>): Declare std::advance for istreambuf_iterator of char types to be friend.
2017-11-20  François Dumont  <fdumont@gcc.gnu.org>

	* include/bits/streambuf_iterator.h (istreambuf_iterator<>): Declare
	std::advance for istreambuf_iterator of char types to be friend.
	(std::advance(istreambuf_iterator&, _Distance)): New overload.
	* include/std/streambuf (basic_streambuf<>): Declare std::advance for
	istreambuf_iterator of char types to be friend.
	* testsuite/22_locale/money_get/get/char/9.cc: Have
	istreambuf_iterator created on the fly when calling money_get<>::get.
	* testsuite/22_locale/money_get/get/wchar_t/9.cc: Likewise.
	* testsuite/24_iterators/istreambuf_iterator/debug/1_neg.cc: New.
	* testsuite/24_iterators/istreambuf_iterator/debug/2_neg.cc: New.
	* testsuite/25_algorithms/advance/istreambuf_iterators/char/1.cc: New.
	* testsuite/25_algorithms/advance/istreambuf_iterators/char/1_neg.cc:
	New.
	* testsuite/25_algorithms/advance/istreambuf_iterators/char/2.cc: New.
	* testsuite/25_algorithms/advance/istreambuf_iterators/char/2_neg.cc:
	New.
	* testsuite/25_algorithms/advance/istreambuf_iterators/char/3_neg.cc:
	New.
	* testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/1.cc:
	New.
	* testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/1_neg.cc:
	New.
	* testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/2.cc:
	New.
	* testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/2_neg.cc:
	New.
	* testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/3_neg.cc:
	New.
	* testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc: Leverage
	on std::advance overload.
	* testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc:
	Likewise.

From-SVN: r254972
2017-11-20 22:30:28 +00:00
Jonathan Wakely 96e0367ead PR libstdc++/83025 fix constraints for path overloads in <fstream>
PR libstdc++/83025
	* include/std/fstream (basic_filebuf::_If_path): Move to
	namespace-scope and rename to _If_fs_path.
	(basic_filebuf::open): Use new name.
	(basic_ifstream(_Path, ios::openmode))
	(basic_ifstream::open(_Path, ios::openmode))
	(basic_ofstream(_Path, ios::openmode))
	(basic_ofstream::open(_Path, ios::openmode))
	(basic_fstream(_Path, ios::openmode))
	(basic_fstream::open(_Path, ios::openmode)): Use _If_fs_path.
	* testsuite/27_io/basic_filebuf/open/char/path.cc: Test with filename
	as non-const char*.
	* testsuite/27_io/basic_fstream/cons/char/path.cc: Likewise.
	* testsuite/27_io/basic_fstream/open/char/path.cc: Likewise.
	* testsuite/27_io/basic_ifstream/cons/char/path.cc: Likewise.
	* testsuite/27_io/basic_ifstream/open/char/path.cc: Likewise.
	* testsuite/27_io/basic_ofstream/cons/char/path.cc: Likewise.
	* testsuite/27_io/basic_ofstream/open/char/path.cc: Likewise.

From-SVN: r254871
2017-11-17 14:07:58 +00:00
Jonathan Wakely a930324dab Add noexcept to std::shared_future copy operations (LWG DR 2799)
* include/std/future (shared_future): Add noexcept to copy constructor
	and copy-assignment operator (LWG 2799).

From-SVN: r254821
2017-11-16 14:39:41 +00:00
Ville Voutilainen 865a86a0fd Fix gcd breakage.
* include/std/numeric (gcd): Use remove_cv_t, not remove_cv.

From-SVN: r254785
2017-11-15 22:42:58 +02:00
Ville Voutilainen 13545f19e0 Implement LWG 2733 and LWG 2759
* include/experimental/numeric (gcd): Reject cv-qualified bool.
(lcm): Likewise.
* include/std/numeric (gcd): Likewise.
(lcm): Likewise.
* testsuite/26_numerics/gcd/gcd_neg.cc: Add tests and adjust.
* testsuite/26_numerics/lcm/lcm_neg.cc: Likewise.

From-SVN: r254736
2017-11-14 20:11:33 +02:00
Jonathan Wakely 54df588530 PR libstdc++/82917 add missing returns in <fstream>
PR libstdc++/82917
	* include/std/fstream (basic_ifstream::open, basic_ofstream::open)
	(basic_fstream::open): Fix missing return.

From-SVN: r254638
2017-11-10 21:43:24 +00:00
Jonathan Wakely e641ee437f Define std::endian for C++2a (P0463R1)
* include/std/type_traits (endian): Define new enumeration type.
	* testsuite/20_util/endian/1.cc: New test.

From-SVN: r254381
2017-11-03 15:45:49 +00:00
Jonathan Wakely 0a6e98b78b Remove ios_mode::trunc from basic_ofstream openmode arguments
* include/std/fstream (basic_ifstream, basic_ofstream, basic_fstream):
	Remove outdated comments about calling c_str() to create a file stream
	from a std::string.
	(basic_ofstream::basic_ofstream, basic_ofstream::open): Remove
	redundant ios_mode::trunc bits from default arguments and comments.

From-SVN: r254226
2017-10-30 15:35:02 +00:00
Jonathan Wakely 02a2c6303f Minor header reorganization for unordered containers
* include/bits/hashtable_policy.h: Include <tuple>.
	* include/std/unordered_map: Only include <bits/stl_pair.h> instead
	of <utility> and <tuple>.
	* include/std/unordered_set: Likewise.

From-SVN: r254223
2017-10-30 14:54:28 +00:00
Ville Voutilainen ccbbf8df05 Implement LWG 2485
* include/debug/array (get(const array<_Tp, _Nm>&&)): New.
* include/std/array (get(const array<_Tp, _Nm>&&)): Likewise.
* include/std/tuple (get(const tuple<_Elements...>&&)): Likewise.
(get(const tuple<_Types...>&&)): Likewise.
* include/std/utility
(__pair_get::__const_move_get(const std::pair<_Tp1, _Tp2>&&)):
Likewise.
(get(const std::pair<_Tp1, _Tp2>&&)): Likewise.
(get(const pair<_Tp, _Up>&&)): Likewise.
(get(const pair<_Up, _Tp>&&)): Likewise.
* testsuite/20_util/pair/astuple/get.cc: Add tests for
new overloads.
* testsuite/20_util/pair/astuple/get_by_type.cc: Likewise.
* testsuite/20_util/tuple/element_access/get2.cc: Likewise.
* testsuite/20_util/tuple/element_access/get2_by_type.cc: Likewise.
* testsuite/23_containers/array/tuple_interface/get.cc: Likewise.
* testsuite/23_containers/array/tuple_interface/tuple_element_debug_neg.cc:
Adjust.
* testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc:
Likewise.

From-SVN: r254222
2017-10-30 16:31:04 +02:00
Jonathan Wakely d49f254a6c Provide filesystem::path overloads for file streams (LWG 2676, partial)
* include/std/fstream (basic_filebuf::_If_path): New SFINAE helper.
	(basic_filebuf::open<Path>(const Path&, const ios_base::openmode&))
	(basic_ifstream<Path>(const Path&, const ios_base::openmode&))
	(basic_ifstream::open<Path>(const Path&, const ios_base::openmode&))
	(basic_ofstream<Path>(const Path&, const ios_base::openmode&))
	(basic_ofstream::open<Path>(const Path&, const ios_base::openmode&))
	(basic_fstream<Path>(const Path&, const ios_base::openmode&))
	(basic_fstream::open<Path>(const Path&, const ios_base::openmode&)):
	New constructors and member functions.
	* testsuite/27_io/basic_filebuf/open/char/path.cc: New test.
	* testsuite/27_io/basic_fstream/cons/char/path.cc: New test.
	* testsuite/27_io/basic_fstream/open/char/path.cc: New test.
	* testsuite/27_io/basic_ifstream/cons/char/path.cc: New test.
	* testsuite/27_io/basic_ifstream/open/char/path.cc: New test.
	* testsuite/27_io/basic_ofstream/cons/char/path.cc: New test.
	* testsuite/27_io/basic_ofstream/open/char/path.cc: New test.

From-SVN: r254148
2017-10-27 13:39:01 +01:00
Jonathan Wakely 30e0aed183 PR libstdc++/82716 avoid stupid -Wmismatched-tags warnings
PR libstdc++/82716
	* include/std/array (tuple_size, tuple_element): Change class-key
	from class to struct, to avoid annoying Clang warnings.

From-SVN: r254077
2017-10-25 14:55:56 +01:00
Jonathan Wakely 02e2a7d8ef Refactor std::basic_string_view members and add noexcept
* include/bits/string_view.tcc (find_first_of, find_last_of)
	(find_first_not_of, find_last_not_of): Add noexcept.
	* include/std/string_view (basic_string_view(const _CharT*))
	(basic_string_view(const _CharT*, size_type))
	(front, back, remove_prefix, remove_suffix, find, rfind)
	(find_first_of, find_first_not_of): Add noexcept.
	(at(size_type), _S_compare(size_type, size_type)): Replace conditional
	expressions with if statements.
	(copy(_CharT*, size_type, size_type), substr(size_type, size_type)):
	Use _M_check for length checks.
	(compare(basic_string_view)): Reformat.
	(_M_check(size_type, const char)): Add noexcept(false).
	(_M_limit(size_type, size_type)): Use noexcept not _GLIBCXX_NOEXCEPT.

From-SVN: r254044
2017-10-24 14:18:52 +01:00
Jonathan Wakely 6a19d2a2ee PR libstdc++/82685 add 'noexcept' to string_view literals
PR libstdc++/82685
	* include/experimental/string_view (operator""sv): Add noexcept.
	* include/std/string_view (operator""sv): Likewise.

From-SVN: r254041
2017-10-24 12:28:40 +01:00
Jonathan Wakely 641cb5a675 Implement C++17 Filesystem library
Based on Filesystem TS implementation, with the changes applied by:

- P0219R1 Relative Paths for Filesystem
- P0317R1 Directory Entry Caching for Filesystem
- P0492R2 Resolution of C++17 National Body Comments

Where appropriate code is shared between the TS and C++17
implementations.

	* include/Makefile.am: Add new headers for C++17 filesystem library.
	* include/Makefile.in: Regenerate.
	* include/bits/fs_dir.h: New header, based on Filesystem TS code in
	include/experimental/bits directory.
	* include/bits/fs_fwd.h: Likewise.
	* include/bits/fs_ops.h: Likewise.
	* include/bits/fs_path.h: Likewise.
	* include/experimental/bits/fs_dir.h: Rename Doxygen group.
	* include/experimental/bits/fs_fwd.h: Likewise.
	* include/experimental/bits/fs_ops.h: Likewise.
	* include/experimental/bits/fs_path.h: Likewise.
	* include/experimental/filesystem (filesystem_error::_M_gen_what):
	Remove inline definition.
	* include/precompiled/stdc++.h: Add <filesystem> to precompiled
	header.
	* include/std/filesystem: New header.
	* python/libstdcxx/v6/printers.py: Enable printer for std::filesystem
	paths.
	* src/filesystem/Makefile.am: Add new files. Compile as C++17.
	* src/filesystem/Makefile.in: Regenerate.
	* src/filesystem/cow-dir.cc: Update comment.
	* src/filesystem/cow-ops.cc: Likewise.
	* src/filesystem/cow-path.cc: Likewise.
	* src/filesystem/cow-std-dir.cc: New file.
	* src/filesystem/cow-std-ops.cc: New file.
	* src/filesystem/cow-std-path.cc: New file.
	* src/filesystem/dir-common.h (_Dir_base, get_file_type): New header
	for common code.
	* src/filesystem/dir.cc (_Dir): Derive from _Dir_base.
	(open_dir): Move to _Dir_base constructor.
	(get_file_type): Move to dir-common.h.
	(recurse): Move to _Dir_base::should_recurse.
	* src/filesystem/ops-common.h: New header for common code.
	* src/filesystem/ops.cc (is_set, make_file_type, make_file_status)
	(is_not_found_errno, file_time, do_copy_file): Move to ops-common.h.
	* src/filesystem/path.cc (filesystem_error::_M_gen_what): Define.
	* src/filesystem/std-dir.cc: New file, based on Filesystem TS code.
	* src/filesystem/std-ops.cc: Likewise.
	* src/filesystem/std-dir.cc: Likewise.
	* testsuite/27_io/filesystem/iterators/directory_iterator.cc: New
	test.
	* testsuite/27_io/filesystem/iterators/pop.cc: New test.
	* testsuite/27_io/filesystem/iterators/recursive_directory_iterator.cc:
	New test.
	* testsuite/27_io/filesystem/operations/absolute.cc: New test.
	* testsuite/27_io/filesystem/operations/canonical.cc: New test.
	* testsuite/27_io/filesystem/operations/copy.cc: New test.
	* testsuite/27_io/filesystem/operations/copy_file.cc: New test.
	* testsuite/27_io/filesystem/operations/create_directories.cc: New
	test.
	* testsuite/27_io/filesystem/operations/create_directory.cc: New test.
	* testsuite/27_io/filesystem/operations/create_symlink.cc: New test.
	* testsuite/27_io/filesystem/operations/current_path.cc: New test.
	* testsuite/27_io/filesystem/operations/equivalent.cc: New test.
	* testsuite/27_io/filesystem/operations/exists.cc: New test.
	* testsuite/27_io/filesystem/operations/file_size.cc: New test.
	* testsuite/27_io/filesystem/operations/is_empty.cc: New test.
	* testsuite/27_io/filesystem/operations/last_write_time.cc: New test.
	* testsuite/27_io/filesystem/operations/permissions.cc: New test.
	* testsuite/27_io/filesystem/operations/proximate.cc: New test.
	* testsuite/27_io/filesystem/operations/read_symlink.cc: New test.
	* testsuite/27_io/filesystem/operations/relative.cc: New test.
	* testsuite/27_io/filesystem/operations/remove_all.cc: New test.
	* testsuite/27_io/filesystem/operations/space.cc: New test.
	* testsuite/27_io/filesystem/operations/status.cc: New test.
	* testsuite/27_io/filesystem/operations/symlink_status.cc: New test.
	* testsuite/27_io/filesystem/operations/temp_directory_path.cc: New
	test.
	* testsuite/27_io/filesystem/operations/weakly_canonical.cc: New test.
	* testsuite/27_io/filesystem/path/append/path.cc: New test.
	* testsuite/27_io/filesystem/path/assign/assign.cc: New test.
	* testsuite/27_io/filesystem/path/assign/copy.cc: New test.
	* testsuite/27_io/filesystem/path/compare/compare.cc: New test.
	* testsuite/27_io/filesystem/path/compare/path.cc: New test.
	* testsuite/27_io/filesystem/path/compare/strings.cc: New test.
	* testsuite/27_io/filesystem/path/concat/path.cc: New test.
	* testsuite/27_io/filesystem/path/concat/strings.cc: New test.
	* testsuite/27_io/filesystem/path/construct/copy.cc: New test.
	* testsuite/27_io/filesystem/path/construct/default.cc: New test.
	* testsuite/27_io/filesystem/path/construct/locale.cc: New test.
	* testsuite/27_io/filesystem/path/construct/range.cc: New test.
	* testsuite/27_io/filesystem/path/construct/string_view.cc: New test.
	* testsuite/27_io/filesystem/path/decompose/extension.cc: New test.
	* testsuite/27_io/filesystem/path/decompose/filename.cc: New test.
	* testsuite/27_io/filesystem/path/decompose/parent_path.cc: New test.
	* testsuite/27_io/filesystem/path/decompose/relative_path.cc: New
	test.
	* testsuite/27_io/filesystem/path/decompose/root_directory.cc: New
	test.
	* testsuite/27_io/filesystem/path/decompose/root_name.cc: New test.
	* testsuite/27_io/filesystem/path/decompose/root_path.cc: New test.
	* testsuite/27_io/filesystem/path/decompose/stem.cc: New test.
	* testsuite/27_io/filesystem/path/generation/normal.cc: New test.
	* testsuite/27_io/filesystem/path/generation/proximate.cc: New test.
	* testsuite/27_io/filesystem/path/generation/relative.cc: New test.
	* testsuite/27_io/filesystem/path/generic/generic_string.cc: New test.
	* testsuite/27_io/filesystem/path/itr/traversal.cc: New test.
	* testsuite/27_io/filesystem/path/modifiers/clear.cc: New test.
	* testsuite/27_io/filesystem/path/modifiers/make_preferred.cc: New
	test.
	* testsuite/27_io/filesystem/path/modifiers/remove_filename.cc: New
	test.
	* testsuite/27_io/filesystem/path/modifiers/replace_extension.cc: New
	test.
	* testsuite/27_io/filesystem/path/modifiers/replace_filename.cc: New
	test.
	* testsuite/27_io/filesystem/path/modifiers/swap.cc: New test.
	* testsuite/27_io/filesystem/path/native/string.cc: New test.
	* testsuite/27_io/filesystem/path/nonmember/hash_value.cc: New test.
	* testsuite/27_io/filesystem/path/query/empty.cc: New test.
	* testsuite/27_io/filesystem/path/query/has_extension.cc: New test.
	* testsuite/27_io/filesystem/path/query/has_filename.cc: New test.
	* testsuite/27_io/filesystem/path/query/has_parent_path.cc: New test.
	* testsuite/27_io/filesystem/path/query/has_relative_path.cc: New
	test.
	* testsuite/27_io/filesystem/path/query/has_root_directory.cc: New
	test.
	* testsuite/27_io/filesystem/path/query/has_root_name.cc: New test.
	* testsuite/27_io/filesystem/path/query/has_root_path.cc: New test.
	* testsuite/27_io/filesystem/path/query/has_stem.cc: New test.
	* testsuite/27_io/filesystem/path/query/is_relative.cc: New test.
	* testsuite/experimental/filesystem/path/construct/string_view.cc:
	Define USE_FILESYSTEM_TS.
	* testsuite/util/testsuite_fs.h: Allow use with C++17 paths as well
	as Filesystem TS.

From-SVN: r254008
2017-10-23 13:11:22 +01:00
Jonathan Wakely 233fa165ad Update value of __cpp_lib_chrono feature-test macro
* include/std/chrono (__cpp_lib_chrono): Update macro value to
	indicate support for P0505R0.
	* testsuite/20_util/duration/arithmetic/constexpr_c++17.cc: Check
	for updated macro.

From-SVN: r253959
2017-10-20 22:05:11 +01:00
Jonathan Wakely d1e85aa999 PR libstdc++/82481 Suppress clang-tidy warnings
PR libstdc++/82481
	* include/std/mutex (call_once): Suppress clang-tidy warnings about
	dangling references.

From-SVN: r253724
2017-10-13 13:39:24 +01:00