diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-09-23 13:00:23 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@linaro.org> | 2017-09-23 13:00:23 +0100 |
commit | c2f1abac401810096970cf7dd60ca60484195a28 (patch) | |
tree | 0f4afaca51d2b39aa13b73b5dd8f23a8e3996830 /libstdc++-v3 | |
parent | b9516bee7e9e9a932733dc7d3041e5aaff1b9f52 (diff) | |
parent | 3bbc3f795c25bc60de3ef0ee0fc16fb002777c7a (diff) | |
download | gcc-c2f1abac401810096970cf7dd60ca60484195a28.tar.gz |
Merge trunk into sve
Diffstat (limited to 'libstdc++-v3')
115 files changed, 712 insertions, 264 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 36a9744fb4a..b2a8653c8b7 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,214 @@ +2017-09-21 Jonathan Wakely <jwakely@redhat.com> + + * testsuite/25_algorithms/clamp/1.cc: Fix order of arguments and + expected results when using predicate defining reverse order. + * testsuite/25_algorithms/clamp/constexpr.cc: Likewise. + +2017-09-20 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/79162 + * include/bits/basic_string.h [!_GLIBCXX_USE_CXX11_ABI] + (basic_string::_If_sv): Remove from the overload set when the + argument is derived from basic_string. + + PR libstdc++/79162 + * include/bits/basic_string.h (basic_string::_If_sv): Remove from the + overload set when the argument is derived from basic_string. + * testsuite/21_strings/basic_string/cons/char/moveable2_c++17.cc: New + test. + * testsuite/21_strings/basic_string/cons/wchar_t/moveable2_c++17.cc: + New test. + + * testsuite/24_iterators/range_access_cpp17.cc: Fix order of dg-do + and dg-options directives. Fix invalid test. + + PR libstdc++/81469 + * libsupc++/exception (uncaught_exception): Deprecate for C++17. + * testsuite/18_support/exception_ptr/62258.cc: Add -Wno-deprecated. + * testsuite/18_support/uncaught_exception/14026.cc: Likewise. + + * include/bits/c++config (_GLIBCXX17_DEPRECATED): Define. + * include/bits/functional_hash.h (__hash_base::result_type) + (__hash_base::argument_type): Add _GLIBCXX17_DEPRECATED. + * include/std/optional (hash<optional<T>>::result_type) + (hash<optional<T>>::argument_type): Add deprecated attribute. + (__is_fast_hash<hash<optional<T>>>): Add partial specialization. + * include/std/variant (hash<variant<Types...>>::result_type) + (hash<variant<Types...>>::argument_type): Add deprecated attribute. + (__is_fast_hash<hash<variant<Types...>>>): Add partial specialization. + + * libsupc++/exception_ptr.h (copy_exception): Remove deprecated + non-standard function. + + PR libstdc++/82262 + * include/std/optional (__optional_hash_call_base): Add template + parameter for remove_const_t<_Tp> and use it consistently. + * testsuite/20_util/optional/hash.cc: Test optional<const T>. + +2017-09-19 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/71500 + * include/bits/regex_executor.tcc + (_Backref_matcher<BidIt, regex_traits<C>>::_M_apply): Use + std::__equal4 instead of C++14 4-iterator overloads of std::equal. + * include/bits/stl_algobase.h (__equal4): New functions implementing + 4-iterator overloads of std::equal for use in C++11. + (equal(It1, It1, It2, It2), equal(It1, It1, It2, It2, BinaryPred)): + Move function bodies to new __equal4 functions. + * testsuite/28_regex/simple_c++11.cc: New. + + PR libstdc++/82254 + * include/std/type_traits (__is_invocable): Add partial specialization + for INVOKE<void> case and remove is_void<R> check from partial + specialization for INVOKE<R> case. + (__is_nt_invocable_impl): New helper for is_nothrow_invocable_r. + (is_nothrow_invocable_r): Use __is_nt_invocable_impl. + * testsuite/20_util/is_nothrow_invocable/value.cc: Add tests for + conversions that can throw or fail to convert. Use static assert + strings to explain negative results. + * testsuite/20_util/is_nothrow_invocable/value_ext.cc: Use + is_nothrow_constructible in is_nt_invocable_conv. + +2017-09-18 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/81468 + * testsuite/20_util/duration/cons/dr1177.cc: Fix incorrect test and + improve static assertion messages. + + * include/std/utility (_Itup_cat, _Make_integer_sequence): Remove. + (_Build_index_tuple, make_integer_sequence): Use built-in to generate + pack expansion. + + PR libstdc++/71187 + * include/std/type_traits (__declval): New function to deduce return + type of declval. + (__declval_protector::_delegate): Remove. + (declval): Use __declval instead of add_rvalue_reference and + __declval_protector::__delegate. + * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error + lineno. + * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: + Likewise. + * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: + Likewise. + +2017-09-15 Jakub Jelinek <jakub@redhat.com> + + * testsuite/libstdc++-prettyprinters/cxx17.cc: Use -std=c++17 or + -std=gnu++17 instead of -std=c++1z or -std=gnu++1z. Use c++17 instead + of c++1z and c++17_only instead of c++1z_only. Adjust expected + diagnostics and comments refering to 1z to 17. + * testsuite/30_threads/lock_guard/cons/deduction.cc: Likewise. + * testsuite/30_threads/scoped_lock/cons/deduction.cc: Likewise. + * testsuite/30_threads/scoped_lock/cons/1.cc: Likewise. + * testsuite/30_threads/scoped_lock/requirements/typedefs.cc: Likewise. + * testsuite/30_threads/scoped_lock/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/30_threads/unique_lock/cons/deduction.cc: Likewise. + * testsuite/18_support/launder/1.cc (test02): Likewise. + * testsuite/18_support/launder/requirements_neg.cc: Likewise. + * testsuite/18_support/launder/requirements.cc: Likewise. + * testsuite/18_support/byte/requirements.cc: Likewise. + * testsuite/18_support/byte/ops.cc: Likewise. + * testsuite/18_support/byte/global_neg.cc: Likewise. + * testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc: + Likewise. + * testsuite/27_io/types/4.cc: Likewise. + * testsuite/25_algorithms/sample/81221.cc: Likewise. + * testsuite/25_algorithms/sample/1.cc: Likewise. + * testsuite/25_algorithms/sample/2.cc: Likewise. + * testsuite/25_algorithms/search/searcher.cc: Likewise. + * testsuite/28_regex/basic_regex/ctors/deduction.cc: Likewise. + * testsuite/experimental/filesystem/path/construct/string_view.cc: + Likewise. + * testsuite/24_iterators/range_access_cpp17.cc: Likewise. + * testsuite/24_iterators/container_access.cc: Likewise. + * testsuite/ext/pb_ds/regression/hash_map_rand.cc: Likewise. + * testsuite/ext/pb_ds/regression/trie_set_rand.cc: Likewise. + * testsuite/ext/pb_ds/regression/hash_set_rand.cc: Likewise. + * testsuite/ext/pb_ds/regression/list_update_set_rand.cc: Likewise. + * testsuite/ext/pb_ds/regression/list_update_map_rand.cc: Likewise. + * testsuite/ext/pb_ds/regression/priority_queue_rand.cc: Likewise. + * testsuite/ext/pb_ds/regression/tree_set_rand.cc: Likewise. + * testsuite/ext/pb_ds/regression/tree_map_rand.cc: Likewise. + * testsuite/ext/pb_ds/regression/trie_map_rand.cc: Likewise. + * testsuite/20_util/shared_ptr/casts/reinterpret.cc: Likewise. + * testsuite/20_util/shared_ptr/cons/deduction.cc: Likewise. + * testsuite/20_util/shared_ptr/cons/array.cc: Likewise. + * testsuite/20_util/shared_ptr/observers/array.cc (struct A): Likewise. + * testsuite/20_util/pair/cons/deduction.cc: Likewise. + * testsuite/20_util/variant/deduction.cc: Likewise. + * testsuite/20_util/tuple/78939.cc: Likewise. + * testsuite/20_util/tuple/cons/deduction.cc: Likewise. + * testsuite/20_util/void_t/1.cc: Likewise. + * testsuite/20_util/duration/arithmetic/constexpr_c++17.cc: Likewise. + * testsuite/20_util/unique_ptr/cons/deduction_neg.cc: Likewise. + * testsuite/20_util/addressof/requirements/constexpr.cc: Likewise. + * testsuite/20_util/weak_ptr/cons/deduction.cc: Likewise. + * testsuite/20_util/has_unique_object_representations/requirements/typedefs.cc: + Likewise. + * testsuite/20_util/has_unique_object_representations/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/has_unique_object_representations/value.cc: + Likewise. + * testsuite/20_util/time_point/arithmetic/constexpr.cc: Likewise. + * testsuite/20_util/function_objects/invoke/59768.cc: Likewise. + * testsuite/20_util/function_objects/mem_fn/80478.cc: Likewise. + * testsuite/20_util/function/cons/deduction.cc: Likewise. + * testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc: + Likewise. + * testsuite/20_util/is_aggregate/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_aggregate/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/is_aggregate/value.cc: Likewise. + * testsuite/26_numerics/lcm/1.cc: Likewise. + * testsuite/26_numerics/lcm/lcm_neg.cc: Likewise. + * testsuite/26_numerics/gcd/1.cc: Likewise. + * testsuite/26_numerics/gcd/gcd_neg.cc: Likewise. + * testsuite/26_numerics/valarray/deduction.cc: Likewise. + * testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc: Likewise. + * testsuite/26_numerics/headers/cmath/hypot.cc: Likewise. + * testsuite/23_containers/queue/members/emplace_cxx17_return.cc: + Likewise. + * testsuite/23_containers/array/cons/deduction.cc: Likewise. + * testsuite/23_containers/array/cons/deduction_neg.cc: Likewise. + * testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc: + Likewise. + * testsuite/23_containers/deque/cons/deduction.cc: Likewise. + * testsuite/23_containers/stack/members/emplace_cxx17_return.cc: + Likewise. + * testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc: + Likewise. + * testsuite/23_containers/list/cons/deduction.cc: Likewise. + * testsuite/23_containers/forward_list/modifiers/emplace_cxx17_return.cc: + Likewise. + * testsuite/23_containers/forward_list/cons/deduction.cc: Likewise. + * testsuite/23_containers/unordered_set/allocator/ext_ptr.cc: Likewise. + * testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc: + Likewise. + * testsuite/23_containers/vector/cons/deduction.cc: Likewise. + * testsuite/23_containers/vector/bool/emplace_cxx17_return.cc: + Likewise. + * testsuite/21_strings/basic_string/cons/char/9.cc: Likewise. + * testsuite/21_strings/basic_string/cons/char/deduction.cc: Likewise. + * testsuite/21_strings/basic_string/cons/char/79162.cc: Likewise. + * testsuite/21_strings/basic_string/cons/wchar_t/9.cc: Likewise. + * testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc: + Likewise. + * testsuite/21_strings/basic_string/cons/wchar_t/79162.cc: Likewise. + * testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc: + Likewise. + * testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc: + Likewise. + * testsuite/21_strings/basic_string_view/operations/compare/char/2.cc: + Likewise. + * testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc: + Likewise. + * testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc: + Likewise. + * testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc: + Likewise. + 2017-09-13 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/81468 @@ -202,7 +413,7 @@ 2017-09-11 Tim Shen <timshen@google.com> PR libstdc++/71500 - * include/bits/regex_executor.tcc: Support icase in regex_tratis<...> + * include/bits/regex_executor.tcc: Support icase in regex_traits<...> for back reference matches. * testsuite/28_regex/regression.cc: Test case. diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index 0ef139b2c2b..a4b81137571 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -115,6 +115,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 template<typename _Tp, typename _Res> using _If_sv = enable_if_t< __and_<is_convertible<const _Tp&, __sv_type>, + __not_<is_convertible<const _Tp*, const basic_string*>>, __not_<is_convertible<const _Tp&, const _CharT*>>>::value, _Res>; @@ -3438,6 +3439,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 template<typename _Tp, typename _Res> using _If_sv = enable_if_t< __and_<is_convertible<const _Tp&, __sv_type>, + __not_<is_convertible<const _Tp*, const basic_string*>>, __not_<is_convertible<const _Tp&, const _CharT*>>>::value, _Res>; diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index d5d1d24ee1a..21e3fbb2741 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -77,6 +77,7 @@ // Macros for deprecated attributes. // _GLIBCXX_USE_DEPRECATED // _GLIBCXX_DEPRECATED +// _GLIBCXX17_DEPRECATED #ifndef _GLIBCXX_USE_DEPRECATED # define _GLIBCXX_USE_DEPRECATED 1 #endif @@ -87,6 +88,12 @@ # define _GLIBCXX_DEPRECATED #endif +#if defined(__DEPRECATED) && (__cplusplus >= 201703L) +# define _GLIBCXX17_DEPRECATED [[__deprecated__]] +#else +# define _GLIBCXX17_DEPRECATED +#endif + // Macros for ABI tag attributes. #ifndef _GLIBCXX_ABI_TAG_CXX11 # define _GLIBCXX_ABI_TAG_CXX11 __attribute ((__abi_tag__ ("cxx11"))) diff --git a/libstdc++-v3/include/bits/functional_hash.h b/libstdc++-v3/include/bits/functional_hash.h index 38be1724d3f..c0936843ac0 100644 --- a/libstdc++-v3/include/bits/functional_hash.h +++ b/libstdc++-v3/include/bits/functional_hash.h @@ -49,8 +49,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _Result, typename _Arg> struct __hash_base { - typedef _Result result_type; - typedef _Arg argument_type; + typedef _Result result_type _GLIBCXX17_DEPRECATED; + typedef _Arg argument_type _GLIBCXX17_DEPRECATED; }; /// Primary class template hash. diff --git a/libstdc++-v3/include/bits/regex_executor.tcc b/libstdc++-v3/include/bits/regex_executor.tcc index f6149fecf9d..2ceba35e7b8 100644 --- a/libstdc++-v3/include/bits/regex_executor.tcc +++ b/libstdc++-v3/include/bits/regex_executor.tcc @@ -366,17 +366,17 @@ namespace __detail _BiIter __actual_end) { if (!_M_icase) - return std::equal(__expected_begin, __expected_end, - __actual_begin, __actual_end); + return std::__equal4(__expected_begin, __expected_end, + __actual_begin, __actual_end); typedef std::ctype<_CharT> __ctype_type; const auto& __fctyp = use_facet<__ctype_type>(_M_traits.getloc()); - return std::equal(__expected_begin, __expected_end, - __actual_begin, __actual_end, - [this, &__fctyp](_CharT __lhs, _CharT __rhs) - { - return __fctyp.tolower(__lhs) - == __fctyp.tolower(__rhs); - }); + return std::__equal4(__expected_begin, __expected_end, + __actual_begin, __actual_end, + [this, &__fctyp](_CharT __lhs, _CharT __rhs) + { + return __fctyp.tolower(__lhs) + == __fctyp.tolower(__rhs); + }); } bool _M_icase; diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index f68ecb22b82..a80934c4faa 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -1082,6 +1082,60 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO return true; } +#if __cplusplus >= 201103L + // 4-iterator version of std::equal<It1, It2> for use in C++11. + template<typename _II1, typename _II2> + inline bool + __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) + { + using _RATag = random_access_iterator_tag; + using _Cat1 = typename iterator_traits<_II1>::iterator_category; + using _Cat2 = typename iterator_traits<_II2>::iterator_category; + using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>; + if (_RAIters()) + { + auto __d1 = std::distance(__first1, __last1); + auto __d2 = std::distance(__first2, __last2); + if (__d1 != __d2) + return false; + return _GLIBCXX_STD_A::equal(__first1, __last1, __first2); + } + + for (; __first1 != __last1 && __first2 != __last2; + ++__first1, (void)++__first2) + if (!(*__first1 == *__first2)) + return false; + return __first1 == __last1 && __first2 == __last2; + } + + // 4-iterator version of std::equal<It1, It2, BinaryPred> for use in C++11. + template<typename _II1, typename _II2, typename _BinaryPredicate> + inline bool + __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2, + _BinaryPredicate __binary_pred) + { + using _RATag = random_access_iterator_tag; + using _Cat1 = typename iterator_traits<_II1>::iterator_category; + using _Cat2 = typename iterator_traits<_II2>::iterator_category; + using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>; + if (_RAIters()) + { + auto __d1 = std::distance(__first1, __last1); + auto __d2 = std::distance(__first2, __last2); + if (__d1 != __d2) + return false; + return _GLIBCXX_STD_A::equal(__first1, __last1, __first2, + __binary_pred); + } + + for (; __first1 != __last1 && __first2 != __last2; + ++__first1, (void)++__first2) + if (!bool(__binary_pred(*__first1, *__first2))) + return false; + return __first1 == __last1 && __first2 == __last2; + } +#endif // C++11 + #if __cplusplus > 201103L #define __cpp_lib_robust_nonmodifying_seq_ops 201304 @@ -1112,24 +1166,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first1, __last1); __glibcxx_requires_valid_range(__first2, __last2); - using _RATag = random_access_iterator_tag; - using _Cat1 = typename iterator_traits<_II1>::iterator_category; - using _Cat2 = typename iterator_traits<_II2>::iterator_category; - using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>; - if (_RAIters()) - { - auto __d1 = std::distance(__first1, __last1); - auto __d2 = std::distance(__first2, __last2); - if (__d1 != __d2) - return false; - return _GLIBCXX_STD_A::equal(__first1, __last1, __first2); - } - - for (; __first1 != __last1 && __first2 != __last2; - ++__first1, (void)++__first2) - if (!(*__first1 == *__first2)) - return false; - return __first1 == __last1 && __first2 == __last2; + return _GLIBCXX_STD_A::__equal4(__first1, __last1, __first2, __last2); } /** @@ -1159,27 +1196,10 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first1, __last1); __glibcxx_requires_valid_range(__first2, __last2); - using _RATag = random_access_iterator_tag; - using _Cat1 = typename iterator_traits<_IIter1>::iterator_category; - using _Cat2 = typename iterator_traits<_IIter2>::iterator_category; - using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>; - if (_RAIters()) - { - auto __d1 = std::distance(__first1, __last1); - auto __d2 = std::distance(__first2, __last2); - if (__d1 != __d2) - return false; - return _GLIBCXX_STD_A::equal(__first1, __last1, __first2, - __binary_pred); - } - - for (; __first1 != __last1 && __first2 != __last2; - ++__first1, (void)++__first2) - if (!bool(__binary_pred(*__first1, *__first2))) - return false; - return __first1 == __last1 && __first2 == __last2; + return _GLIBCXX_STD_A::__equal4(__first1, __last1, __first2, __last2, + __binary_pred); } -#endif +#endif // C++14 /** * @brief Performs @b dictionary comparison on ranges. diff --git a/libstdc++-v3/include/std/optional b/libstdc++-v3/include/std/optional index 2743ef963b4..e017eedbde7 100644 --- a/libstdc++-v3/include/std/optional +++ b/libstdc++-v3/include/std/optional @@ -1005,33 +1005,37 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Hash. - template<typename _Tp, bool - = __poison_hash<remove_const_t<_Tp>>::__enable_hash_call> + template<typename _Tp, typename _Up = remove_const_t<_Tp>, + bool = __poison_hash<_Up>::__enable_hash_call> struct __optional_hash_call_base { size_t operator()(const optional<_Tp>& __t) const - noexcept(noexcept(hash<_Tp> {}(*__t))) + noexcept(noexcept(hash<_Up>{}(*__t))) { // We pick an arbitrary hash for disengaged optionals which hopefully // usual values of _Tp won't typically hash to. constexpr size_t __magic_disengaged_hash = static_cast<size_t>(-3333); - return __t ? hash<_Tp> {}(*__t) : __magic_disengaged_hash; + return __t ? hash<_Up>{}(*__t) : __magic_disengaged_hash; } }; - template<typename _Tp> - struct __optional_hash_call_base<_Tp, false> {}; + template<typename _Tp, typename _Up> + struct __optional_hash_call_base<_Tp, _Up, false> {}; template<typename _Tp> struct hash<optional<_Tp>> : private __poison_hash<remove_const_t<_Tp>>, public __optional_hash_call_base<_Tp> { - using result_type = size_t; - using argument_type = optional<_Tp>; + using result_type [[__deprecated__]] = size_t; + using argument_type [[__deprecated__]] = optional<_Tp>; }; + template<typename _Tp> + struct __is_fast_hash<hash<optional<_Tp>>> : __is_fast_hash<hash<_Tp>> + { }; + /// @} template <typename _Tp> optional(_Tp) -> optional<_Tp>; diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index f021c42396c..036f7667bd8 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -754,15 +754,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Destructible and constructible type properties. - template<typename> - struct add_rvalue_reference; - /** * @brief Utility to simplify expressions used in unevaluated operands * @ingroup utilities */ + + template<typename _Tp, typename _Up = _Tp&&> + _Up + __declval(int); + template<typename _Tp> - typename add_rvalue_reference<_Tp>::type declval() noexcept; + _Tp + __declval(long); + + template<typename _Tp> + auto declval() noexcept -> decltype(__declval<_Tp>(0)); template<typename, unsigned = 0> struct extent; @@ -2079,16 +2085,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct __declval_protector { static const bool __stop = false; - static typename add_rvalue_reference<_Tp>::type __delegate(); }; template<typename _Tp> - inline typename add_rvalue_reference<_Tp>::type - declval() noexcept + auto declval() noexcept -> decltype(__declval<_Tp>(0)) { static_assert(__declval_protector<_Tp>::__stop, "declval() must not be used!"); - return __declval_protector<_Tp>::__delegate(); + return __declval<_Tp>(0); } /// result_of @@ -2588,7 +2592,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _Result, typename _Ret> struct __is_invocable_impl<_Result, _Ret, __void_t<typename _Result::type>> - : __or_<is_void<_Ret>, is_convertible<typename _Result::type, _Ret>>::type + : is_convertible<typename _Result::type, _Ret>::type + { }; + + template<typename _Result> + struct __is_invocable_impl<_Result, void, __void_t<typename _Result::type>> + : true_type { }; template<typename _Fn, typename... _ArgTypes> @@ -2687,10 +2696,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __call_is_nothrow_<_Fn, _ArgTypes...>>::type { }; + template<typename _Result, typename _Ret, typename = void> + struct __is_nt_invocable_impl : false_type { }; + + template<typename _Result, typename _Ret> + struct __is_nt_invocable_impl<_Result, _Ret, + __void_t<typename _Result::type>> + : __and_<is_convertible<typename _Result::type, _Ret>, + is_nothrow_constructible<_Ret, typename _Result::type>> + { }; + + template<typename _Result> + struct __is_nt_invocable_impl<_Result, void, + __void_t<typename _Result::type>> + : true_type + { }; + /// std::is_nothrow_invocable_r template<typename _Ret, typename _Fn, typename... _ArgTypes> struct is_nothrow_invocable_r - : __and_<__is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>, + : __and_<__is_nt_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>, __call_is_nothrow_<_Fn, _ArgTypes...>>::type { }; diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility index c18bcb6f72d..29a626004f9 100644 --- a/libstdc++-v3/include/std/utility +++ b/libstdc++-v3/include/std/utility @@ -267,32 +267,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // extract the elements in a tuple. template<size_t... _Indexes> struct _Index_tuple { }; - // Concatenates two _Index_tuples. - template<typename _Itup1, typename _Itup2> struct _Itup_cat; - - template<size_t... _Ind1, size_t... _Ind2> - struct _Itup_cat<_Index_tuple<_Ind1...>, _Index_tuple<_Ind2...>> - { - using __type = _Index_tuple<_Ind1..., (_Ind2 + sizeof...(_Ind1))...>; - }; +#ifdef __has_builtin +# if __has_builtin(__make_integer_seq) +# define _GLIBCXX_USE_MAKE_INTEGER_SEQ 1 +# endif +#endif // Builds an _Index_tuple<0, 1, 2, ..., _Num-1>. template<size_t _Num> struct _Build_index_tuple - : _Itup_cat<typename _Build_index_tuple<_Num / 2>::__type, - typename _Build_index_tuple<_Num - _Num / 2>::__type> - { }; - - template<> - struct _Build_index_tuple<1> { - typedef _Index_tuple<0> __type; - }; +#if _GLIBCXX_USE_MAKE_INTEGER_SEQ + template<typename, size_t... _Indices> + using _IdxTuple = _Index_tuple<_Indices...>; - template<> - struct _Build_index_tuple<0> - { - typedef _Index_tuple<> __type; + using __type = __make_integer_seq<_IdxTuple, size_t, _Num>; +#else + using __type = _Index_tuple<__integer_pack(_Num)...>; +#endif }; #if __cplusplus > 201103L @@ -307,23 +299,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static constexpr size_t size() { return sizeof...(_Idx); } }; - template<typename _Tp, _Tp _Num, - typename _ISeq = typename _Build_index_tuple<_Num>::__type> - struct _Make_integer_sequence; - - template<typename _Tp, _Tp _Num, size_t... _Idx> - struct _Make_integer_sequence<_Tp, _Num, _Index_tuple<_Idx...>> - { - static_assert( _Num >= 0, - "Cannot make integer sequence of negative length" ); - - typedef integer_sequence<_Tp, static_cast<_Tp>(_Idx)...> __type; - }; - /// Alias template make_integer_sequence template<typename _Tp, _Tp _Num> using make_integer_sequence - = typename _Make_integer_sequence<_Tp, _Num>::__type; +#if _GLIBCXX_USE_MAKE_INTEGER_SEQ + = __make_integer_seq<integer_sequence, _Tp, _Num>; +#else + = integer_sequence<_Tp, __integer_pack(_Num)...>; +#endif + +#undef _GLIBCXX_USE_MAKE_INTEGER_SEQ /// Alias template index_sequence template<size_t... _Idx> diff --git a/libstdc++-v3/include/std/variant b/libstdc++-v3/include/std/variant index ee2571b7857..8f574f63924 100644 --- a/libstdc++-v3/include/std/variant +++ b/libstdc++-v3/include/std/variant @@ -1420,15 +1420,15 @@ namespace __variant variant<_Types...>, std::index_sequence_for<_Types...>>, public __variant_hash_call_base<_Types...> { - using result_type = size_t; - using argument_type = variant<_Types...>; + using result_type [[__deprecated__]] = size_t; + using argument_type [[__deprecated__]] = variant<_Types...>; }; template<> struct hash<monostate> { - using result_type = size_t; - using argument_type = monostate; + using result_type [[__deprecated__]] = size_t; + using argument_type [[__deprecated__]] = monostate; size_t operator()(const monostate& __t) const noexcept @@ -1438,6 +1438,11 @@ namespace __variant } }; + template<typename... _Types> + struct __is_fast_hash<hash<variant<_Types...>>> + : bool_constant<(__is_fast_hash<_Types>::value && ...)> + { }; + _GLIBCXX_END_NAMESPACE_VERSION } // namespace std diff --git a/libstdc++-v3/libsupc++/exception b/libstdc++-v3/libsupc++/exception index e51d31c938b..9b177c7ee8a 100644 --- a/libstdc++-v3/libsupc++/exception +++ b/libstdc++-v3/libsupc++/exception @@ -98,9 +98,10 @@ namespace std * %exception can result in a call of @c terminate() * (15.5.1).' */ + _GLIBCXX17_DEPRECATED bool uncaught_exception() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__)); -#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++98 +#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++17 or gnu++98 #define __cpp_lib_uncaught_exceptions 201411 /// The number of uncaught exceptions. int uncaught_exceptions() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__)); diff --git a/libstdc++-v3/libsupc++/exception_ptr.h b/libstdc++-v3/libsupc++/exception_ptr.h index 0ece81d8137..dae4ca68fcf 100644 --- a/libstdc++-v3/libsupc++/exception_ptr.h +++ b/libstdc++-v3/libsupc++/exception_ptr.h @@ -201,19 +201,6 @@ namespace std #endif } - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 1130. copy_exception name misleading - /// Obtain an exception_ptr pointing to a copy of the supplied object. - /// This function is deprecated, use std::make_exception_ptr instead. - template<typename _Ex> - exception_ptr - copy_exception(_Ex __ex) _GLIBCXX_USE_NOEXCEPT _GLIBCXX_DEPRECATED; - - template<typename _Ex> - exception_ptr - copy_exception(_Ex __ex) _GLIBCXX_USE_NOEXCEPT - { return std::make_exception_ptr<_Ex>(__ex); } - // @} group exceptions } // namespace std diff --git a/libstdc++-v3/testsuite/18_support/byte/global_neg.cc b/libstdc++-v3/testsuite/18_support/byte/global_neg.cc index 722f65860f7..36f679095dc 100644 --- a/libstdc++-v3/testsuite/18_support/byte/global_neg.cc +++ b/libstdc++-v3/testsuite/18_support/byte/global_neg.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <stddef.h> diff --git a/libstdc++-v3/testsuite/18_support/byte/ops.cc b/libstdc++-v3/testsuite/18_support/byte/ops.cc index 6573bd9b1e3..59773cbc8c8 100644 --- a/libstdc++-v3/testsuite/18_support/byte/ops.cc +++ b/libstdc++-v3/testsuite/18_support/byte/ops.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <cstddef> diff --git a/libstdc++-v3/testsuite/18_support/byte/requirements.cc b/libstdc++-v3/testsuite/18_support/byte/requirements.cc index da5fc91a12a..4cb05df0405 100644 --- a/libstdc++-v3/testsuite/18_support/byte/requirements.cc +++ b/libstdc++-v3/testsuite/18_support/byte/requirements.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <cstddef> diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/62258.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/62258.cc index a53b0669b83..635672cc255 100644 --- a/libstdc++-v3/testsuite/18_support/exception_ptr/62258.cc +++ b/libstdc++-v3/testsuite/18_support/exception_ptr/62258.cc @@ -1,3 +1,4 @@ +// { dg-options "-Wno-deprecated" } // { dg-do run { target c++11 } } // Copyright (C) 2015-2017 Free Software Foundation, Inc. diff --git a/libstdc++-v3/testsuite/18_support/launder/1.cc b/libstdc++-v3/testsuite/18_support/launder/1.cc index 022e6cf5839..29c1b4ab333 100644 --- a/libstdc++-v3/testsuite/18_support/launder/1.cc +++ b/libstdc++-v3/testsuite/18_support/launder/1.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <new> #include <testsuite_hooks.h> @@ -36,7 +36,7 @@ test01() void test02() { - // C++1z 1.8 [intro.object] + // C++17 1.8 [intro.object] struct X { const int n; }; union U { X x; float f; }; diff --git a/libstdc++-v3/testsuite/18_support/launder/requirements.cc b/libstdc++-v3/testsuite/18_support/launder/requirements.cc index 896a0038016..e89deb20094 100644 --- a/libstdc++-v3/testsuite/18_support/launder/requirements.cc +++ b/libstdc++-v3/testsuite/18_support/launder/requirements.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // NB: This file is for testing new with NO OTHER INCLUDES. #include <new> diff --git a/libstdc++-v3/testsuite/18_support/launder/requirements_neg.cc b/libstdc++-v3/testsuite/18_support/launder/requirements_neg.cc index 38759c061a9..90e1eb63b44 100644 --- a/libstdc++-v3/testsuite/18_support/launder/requirements_neg.cc +++ b/libstdc++-v3/testsuite/18_support/launder/requirements_neg.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <new> diff --git a/libstdc++-v3/testsuite/18_support/uncaught_exception/14026.cc b/libstdc++-v3/testsuite/18_support/uncaught_exception/14026.cc index 78581af5629..8bc4953e028 100644 --- a/libstdc++-v3/testsuite/18_support/uncaught_exception/14026.cc +++ b/libstdc++-v3/testsuite/18_support/uncaught_exception/14026.cc @@ -18,6 +18,8 @@ // PR 14026 // 18.6.4 uncaught_exception +// { dg-options "-Wno-deprecated" } + #include <cstdlib> #include <exception> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc b/libstdc++-v3/testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc index 7dcce563f7f..f315792dc7f 100644 --- a/libstdc++-v3/testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc +++ b/libstdc++-v3/testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc @@ -15,7 +15,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-options "-std=gnu++1z" } +// { dg-options "-std=gnu++17" } #include <cassert> #include <exception> diff --git a/libstdc++-v3/testsuite/20_util/addressof/requirements/constexpr.cc b/libstdc++-v3/testsuite/20_util/addressof/requirements/constexpr.cc index 51f2fa84739..0138f5b7cfa 100644 --- a/libstdc++-v3/testsuite/20_util/addressof/requirements/constexpr.cc +++ b/libstdc++-v3/testsuite/20_util/addressof/requirements/constexpr.cc @@ -15,8 +15,8 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-options "-std=gnu++1z" } -// { dg-do compile { target c++1z } } +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } #include <utility> diff --git a/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc b/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc index 4e254e89191..17b41a007db 100644 --- a/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc +++ b/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc @@ -18,7 +18,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-error "static assertion failed" "" { target *-*-* } 2089 } +// { dg-error "static assertion failed" "" { target *-*-* } 2093 } #include <utility> diff --git a/libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr_c++17.cc b/libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr_c++17.cc index 2721765ea75..438d50afddf 100644 --- a/libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr_c++17.cc +++ b/libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr_c++17.cc @@ -1,5 +1,5 @@ // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // Copyright (C) 2011-2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/duration/cons/dr1177.cc b/libstdc++-v3/testsuite/20_util/duration/cons/dr1177.cc index 28c881ccc79..d90cd27f482 100644 --- a/libstdc++-v3/testsuite/20_util/duration/cons/dr1177.cc +++ b/libstdc++-v3/testsuite/20_util/duration/cons/dr1177.cc @@ -36,6 +36,6 @@ static_assert(is_constructible<duration<int>, duration<long>>{}, static_assert(!is_constructible<duration<int>, duration<int, ratio<2,3>>>{}, "cannot convert duration to one with different period"); static_assert(is_constructible<duration<float>, duration<int, ratio<2,3>>>{}, - "unless it has a floating-point representation"); -static_assert(is_constructible<duration<float>, duration<int, ratio<1,3>>>{}, - "or a period that is an integral multiple of the original"); + "... unless the result type has a floating-point representation"); +static_assert(is_constructible<duration<int, ratio<1,3>>, duration<int>>{}, + "... or the original's period is a multiple of the result's period"); diff --git a/libstdc++-v3/testsuite/20_util/function/cons/deduction.cc b/libstdc++-v3/testsuite/20_util/function/cons/deduction.cc index a4346e0accd..a3d4ca61134 100644 --- a/libstdc++-v3/testsuite/20_util/function/cons/deduction.cc +++ b/libstdc++-v3/testsuite/20_util/function/cons/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <functional> diff --git a/libstdc++-v3/testsuite/20_util/function_objects/invoke/59768.cc b/libstdc++-v3/testsuite/20_util/function_objects/invoke/59768.cc index 823e9e0612c..de2a01d61c5 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/invoke/59768.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/invoke/59768.cc @@ -15,7 +15,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-options "-std=gnu++1z" } +// { dg-options "-std=gnu++17" } // { dg-do compile } #include <functional> diff --git a/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/80478.cc b/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/80478.cc index f49fcaa3492..d20334df2b9 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/80478.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/80478.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <functional> diff --git a/libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/explicit_instantiation.cc index 28d2512ecff..278f3d38738 100644 --- a/libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/explicit_instantiation.cc +++ b/libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/explicit_instantiation.cc @@ -1,5 +1,5 @@ -// { dg-options "-std=gnu++1z" } -// { dg-do compile { target c++1z } } +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } // Copyright (C) 2016-2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/typedefs.cc index 447343e4c8d..c9fdbe9ca34 100644 --- a/libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/typedefs.cc @@ -1,5 +1,5 @@ -// { dg-options "-std=gnu++1z" } -// { dg-do compile { target c++1z } } +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } // Copyright (C) 2016-2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/has_unique_object_representations/value.cc b/libstdc++-v3/testsuite/20_util/has_unique_object_representations/value.cc index 008d59062ab..8587258a64e 100644 --- a/libstdc++-v3/testsuite/20_util/has_unique_object_representations/value.cc +++ b/libstdc++-v3/testsuite/20_util/has_unique_object_representations/value.cc @@ -1,5 +1,5 @@ -// { dg-options "-std=gnu++1z" } -// { dg-do compile { target c++1z } } +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } // Copyright (C) 2016-2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/is_aggregate/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_aggregate/requirements/explicit_instantiation.cc index 4c189cdc0c3..b10132174da 100644 --- a/libstdc++-v3/testsuite/20_util/is_aggregate/requirements/explicit_instantiation.cc +++ b/libstdc++-v3/testsuite/20_util/is_aggregate/requirements/explicit_instantiation.cc @@ -1,5 +1,5 @@ -// { dg-options "-std=gnu++1z" } -// { dg-do compile { target c++1z } } +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } // Copyright (C) 2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/is_aggregate/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_aggregate/requirements/typedefs.cc index 4b0358ccc90..5a8a383b2b9 100644 --- a/libstdc++-v3/testsuite/20_util/is_aggregate/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/20_util/is_aggregate/requirements/typedefs.cc @@ -1,5 +1,5 @@ -// { dg-options "-std=gnu++1z" } -// { dg-do compile { target c++1z } } +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } // Copyright (C) 2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/is_aggregate/value.cc b/libstdc++-v3/testsuite/20_util/is_aggregate/value.cc index 6168d9c39c7..1cac59915c6 100644 --- a/libstdc++-v3/testsuite/20_util/is_aggregate/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_aggregate/value.cc @@ -1,5 +1,5 @@ -// { dg-options "-std=gnu++1z" } -// { dg-do compile { target c++1z } } +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } // Copyright (C) 2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc index 4ccb459e0f5..dfa76aae61c 100644 --- a/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc @@ -40,6 +40,10 @@ template<typename R, typename... T> void test01() { + struct T { T(int) { } }; + struct NT { NT(int) noexcept { } }; + struct Ex { explicit Ex(int) noexcept { } }; + using func_type = void(*)(); static_assert( ! is_nt_invocable< func_type>(), ""); @@ -55,28 +59,46 @@ void test01() static_assert( ! is_nt_invocable< mem_type, int >(), ""); static_assert( ! is_nt_invocable< mem_type, int& >(), ""); - static_assert( is_nt_invocable< mem_type, X& >(), ""); - static_assert( is_nt_invocable_r< int, mem_type, X& >(), ""); - static_assert( is_nt_invocable_r< int&, mem_type, X& >(), ""); - static_assert( is_nt_invocable_r< long, mem_type, X& >(), ""); - static_assert( is_nt_invocable_r< int&, mem_type, X* >(), ""); + static_assert( is_nt_invocable< mem_type, X& >(), ""); + static_assert( is_nt_invocable_r< int, mem_type, X& >(), ""); + static_assert( is_nt_invocable_r< int&, mem_type, X& >(), ""); + static_assert( is_nt_invocable_r< long, mem_type, X& >(), ""); + static_assert( ! is_nt_invocable_r< long&, mem_type, X& >(), + "conversion fails, cannot bind long& to int"); + static_assert( is_nt_invocable_r< int&, mem_type, X* >(), ""); + + static_assert( ! is_nt_invocable_r< T, mem_type, X& >(), + "conversion throws"); + static_assert( is_nt_invocable_r< NT, mem_type, X& >(), ""); + static_assert( ! is_nt_invocable_r< Ex, mem_type, X& >(), + "conversion fails, would use explicit constructor"); using memfun_type = int (X::*)(); - static_assert( ! is_nt_invocable< memfun_type >(), ""); - static_assert( ! is_nt_invocable< memfun_type, int >(), ""); - static_assert( ! is_nt_invocable< memfun_type, int& >(), ""); - static_assert( ! is_nt_invocable< memfun_type, X& >(), ""); - static_assert( ! is_nt_invocable< memfun_type, X* >(), ""); + static_assert( ! is_nt_invocable< memfun_type >(), "no object"); + static_assert( ! is_nt_invocable< memfun_type, int >(), "no object"); + static_assert( ! is_nt_invocable< memfun_type, int& >(), "no object"); + static_assert( ! is_nt_invocable< memfun_type, X& >(), "call throws"); + static_assert( ! is_nt_invocable< memfun_type, X* >(), "call throws"); + + static_assert( ! is_nt_invocable_r< T, memfun_type, X& >(), "call throws"); + static_assert( ! is_nt_invocable_r< NT, memfun_type, X& >(), "call throws"); + static_assert( ! is_nt_invocable_r< Ex, memfun_type, X& >(), "call throws"); #if __cpp_noexcept_function_type using memfun_type_nt = int (X::*)() noexcept; - static_assert( ! is_nt_invocable< memfun_type_nt >(), ""); - static_assert( ! is_nt_invocable< memfun_type_nt, int >(), ""); - static_assert( ! is_nt_invocable< memfun_type_nt, int& >(), ""); + static_assert( ! is_nt_invocable< memfun_type_nt >(), "no object"); + static_assert( ! is_nt_invocable< memfun_type_nt, int >(), "no object"); + static_assert( ! is_nt_invocable< memfun_type_nt, int& >(), "no object"); static_assert( is_nt_invocable< memfun_type_nt, X& >(), ""); static_assert( is_nt_invocable< memfun_type_nt, X* >(), ""); + + static_assert( ! is_nt_invocable_r< T, memfun_type_nt, X& >(), + "conversion throws"); + static_assert( is_nt_invocable_r< NT, memfun_type_nt, X& >(), ""); + static_assert( ! is_nt_invocable_r< Ex, memfun_type_nt, X& >(), + "conversion fails, would use explicit constructor"); #endif struct F { @@ -89,12 +111,44 @@ void test01() }; using CF = const F; - static_assert( ! is_nt_invocable_r< int&, F >(), ""); - static_assert( is_nt_invocable_r< long&, CF >(), ""); - static_assert( ! is_nt_invocable_r< short&, F, int >(), "" ); - static_assert( is_nt_invocable_r< char&, F&, int >(), "" ); - static_assert( is_nt_invocable_r< char&, CF, int >(), "" ); - static_assert( is_nt_invocable_r< char&, CF&, int >(), "" ); - - static_assert( ! is_nt_invocable< F, int, int >(), ""); + static_assert( ! is_nt_invocable< F >(), "call throws"); + static_assert( is_nt_invocable< CF >(), ""); + + static_assert( ! is_nt_invocable_r< int&, F >(), "call throws"); + static_assert( is_nt_invocable_r< long&, CF >(), ""); + static_assert( ! is_nt_invocable_r< T, F >(), "call throws"); + static_assert( ! is_nt_invocable_r< NT, F >(), "call throws"); + static_assert( ! is_nt_invocable_r< Ex, F >(), "call throws"); + static_assert( ! is_nt_invocable_r< T, CF >(), "conversion throws"); + static_assert( is_nt_invocable_r< NT, CF >(), "" ); + static_assert( ! is_nt_invocable_r< Ex, CF >(), "conversion fails"); + + static_assert( ! is_nt_invocable< F, int >(), "call throws"); + static_assert( is_nt_invocable< F&, int >(), ""); + + static_assert( ! is_nt_invocable_r< short&, F, int >(), + "call throws" ); + static_assert( is_nt_invocable_r< char&, F&, int >(), ""); + static_assert( ! is_nt_invocable_r< T, F&, int >(), + "conversion throws"); + static_assert( is_nt_invocable_r< NT, F&, int >(), ""); + static_assert( ! is_nt_invocable_r< Ex, F&, int >(), + "conversion fails, would use explicit constructor"); + + static_assert( is_nt_invocable< CF, int >(), ""); + static_assert( is_nt_invocable< CF&, int >(), ""); + + static_assert( is_nt_invocable_r< char&, CF, int >(), ""); + static_assert( is_nt_invocable_r< char&, CF&, int >(), ""); + + static_assert( ! is_nt_invocable_r< T, CF&, int >(), + "conversion throws"); + static_assert( is_nt_invocable_r< NT, CF&, int >(), ""); + static_assert( ! is_nt_invocable_r< Ex, CF&, int >(), + "conversion fails, would use explicit constructor"); + + static_assert( ! is_nt_invocable< F, int, int >(), + "would call private member"); + static_assert( ! is_nt_invocable_r<void, F, int, int >(), + "would call private member"); } diff --git a/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value_ext.cc b/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value_ext.cc index 7217324e1b3..7fd3d924843 100644 --- a/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value_ext.cc +++ b/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value_ext.cc @@ -27,7 +27,9 @@ template<typename... T> constexpr bool is_nt_invocable_conv(std::true_type) { using result_type = typename std::__invoke_result<T...>::type; - return std::is_void<R>::value || std::is_convertible<result_type, R>::value; + return std::is_void<R>::value + || (std::is_convertible<result_type, R>::value + && std::is_nothrow_constructible<R, result_type>::value); } template<typename R, typename... T> diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc index e3e80f91979..308155383f0 100644 --- a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc +++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc @@ -47,4 +47,4 @@ void test01() // { dg-error "required from here" "" { target *-*-* } 39 } // { dg-error "required from here" "" { target *-*-* } 41 } -// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1754 } +// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1760 } diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc index 86b0c2d6da7..412608e5669 100644 --- a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc +++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc @@ -47,5 +47,5 @@ void test01() // { dg-error "required from here" "" { target *-*-* } 39 } // { dg-error "required from here" "" { target *-*-* } 41 } -// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1650 } +// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1656 } diff --git a/libstdc++-v3/testsuite/20_util/optional/hash.cc b/libstdc++-v3/testsuite/20_util/optional/hash.cc index c16f0b20fb2..35ae51b947a 100644 --- a/libstdc++-v3/testsuite/20_util/optional/hash.cc +++ b/libstdc++-v3/testsuite/20_util/optional/hash.cc @@ -29,14 +29,23 @@ template<class T> auto f(...) -> decltype(std::false_type()); static_assert(!decltype(f<S>(0))::value, ""); -static_assert(!std::is_invocable_v< - std::hash<std::optional<S>>&, std::optional<S> const&> ); -static_assert(std::is_invocable_v< - std::hash<std::optional<int>>&, std::optional<int> const&> ); + +template<typename T> +constexpr bool hashable() +{ return std::is_invocable_v<std::hash<T>&, const T&>; } + +static_assert(!hashable<std::optional<S>>()); +static_assert(!hashable<std::optional<const S>>()); +static_assert(hashable<std::optional<int>>()); +static_assert(hashable<std::optional<const int>>()); int main() { int x = 42; std::optional<int> x2 = 42; VERIFY(std::hash<int>()(x) == std::hash<std::optional<int>>()(x2)); + + // PR libstdc++/82262 + std::optional<const int> x3 = x2; + VERIFY(std::hash<int>()(x) == std::hash<std::optional<const int>>()(x3)); } diff --git a/libstdc++-v3/testsuite/20_util/pair/cons/deduction.cc b/libstdc++-v3/testsuite/20_util/pair/cons/deduction.cc index c8e6fd60591..3831cf2316f 100644 --- a/libstdc++-v3/testsuite/20_util/pair/cons/deduction.cc +++ b/libstdc++-v3/testsuite/20_util/pair/cons/deduction.cc @@ -1,5 +1,5 @@ // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // Copyright (C) 2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/casts/reinterpret.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/casts/reinterpret.cc index c3c79d4b6e6..14049dbe0e3 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/casts/reinterpret.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/casts/reinterpret.cc @@ -1,5 +1,5 @@ // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // Copyright (C) 2016-2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/array.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/array.cc index 88d5a999805..e529bf85c29 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/array.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/array.cc @@ -20,7 +20,7 @@ #include <memory> #include <testsuite_hooks.h> -// C++1z 20.11.2.2.1 shared_ptr constructors [util.smartptr.shared.const] +// C++17 20.11.2.2.1 shared_ptr constructors [util.smartptr.shared.const] template<typename To, typename From> constexpr bool check() diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/deduction.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/deduction.cc index ecd0780fbc2..9621185fd40 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/deduction.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <memory> diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/observers/array.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/observers/array.cc index 4216f9510e0..59115432782 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/observers/array.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/observers/array.cc @@ -25,7 +25,7 @@ struct A int i = 0; }; -// C++1z 20.11.2.2.5 shared_ptr observers [util.smartptr.shared.obs] +// C++17 20.11.2.2.5 shared_ptr observers [util.smartptr.shared.obs] // get void diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc index 663b2c0f7a7..e0ae50b855c 100644 --- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc +++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <memory> diff --git a/libstdc++-v3/testsuite/20_util/time_point/arithmetic/constexpr.cc b/libstdc++-v3/testsuite/20_util/time_point/arithmetic/constexpr.cc index 2f2acebccf1..9bf41e0b57d 100644 --- a/libstdc++-v3/testsuite/20_util/time_point/arithmetic/constexpr.cc +++ b/libstdc++-v3/testsuite/20_util/time_point/arithmetic/constexpr.cc @@ -1,5 +1,5 @@ // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // Copyright (C) 2011-2016 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/tuple/78939.cc b/libstdc++-v3/testsuite/20_util/tuple/78939.cc index bab143b387f..552ceb363ec 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/78939.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/78939.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // PR libstdc++/78939 diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc index 47e2488348a..0804d5584e3 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc @@ -1,5 +1,5 @@ // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // Copyright (C) 2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/deduction_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/deduction_neg.cc index 23aca62caad..dbf27069f9a 100644 --- a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/deduction_neg.cc +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/deduction_neg.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <memory> diff --git a/libstdc++-v3/testsuite/20_util/variant/deduction.cc b/libstdc++-v3/testsuite/20_util/variant/deduction.cc index 33bc9d2a40e..1059a52a211 100644 --- a/libstdc++-v3/testsuite/20_util/variant/deduction.cc +++ b/libstdc++-v3/testsuite/20_util/variant/deduction.cc @@ -1,5 +1,5 @@ // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // Copyright (C) 2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/20_util/void_t/1.cc b/libstdc++-v3/testsuite/20_util/void_t/1.cc index 78a6daa5e65..54bfaa0c35a 100644 --- a/libstdc++-v3/testsuite/20_util/void_t/1.cc +++ b/libstdc++-v3/testsuite/20_util/void_t/1.cc @@ -15,7 +15,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-options "-std=gnu++1z" } +// { dg-options "-std=gnu++17" } // { dg-do compile } #include <type_traits> diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/cons/deduction.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/cons/deduction.cc index ea384172aca..dedea6e22f4 100644 --- a/libstdc++-v3/testsuite/20_util/weak_ptr/cons/deduction.cc +++ b/libstdc++-v3/testsuite/20_util/weak_ptr/cons/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <memory> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/79162.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/79162.cc index 0afbe119d4f..76f1db96e9f 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/79162.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/79162.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <string> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/9.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/9.cc index 5ff6988ef7c..f864821a77f 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/9.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/9.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <string> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc index 205714a7f5f..52ab0601a24 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <string> #include <testsuite_iterators.h> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2_c++17.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2_c++17.cc new file mode 100644 index 00000000000..88be60d05ab --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2_c++17.cc @@ -0,0 +1,53 @@ +// { dg-options "-std=gnu++17" } +// { dg-do run { target c++17 } } + +// Copyright (C) 2011-2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// NOTE: This makes use of the fact that we know how moveable +// is implemented on string (via swap). If the implementation changed +// this test may begin to fail. + +#include <string> +#include <utility> +#include <testsuite_hooks.h> + +class tstring : public std::basic_string<char> +{ +public: + tstring() : std::basic_string<char>() {} + tstring(tstring&& s) : std::basic_string<char>(std::move(s)) {} + tstring& operator=(tstring&& s) = default; +}; + +void test01() +{ + tstring a, b; + a.push_back('1'); + b = std::move(a); + VERIFY( b.size() == 1 && b[0] == '1' && a.size() == 0 ); + + tstring c(std::move(b)); + VERIFY( c.size() == 1 && c[0] == '1' ); + VERIFY( b.size() == 0 ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/79162.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/79162.cc index 0afbe119d4f..76f1db96e9f 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/79162.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/79162.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <string> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/9.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/9.cc index 2a39d002110..b56c0b80e02 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/9.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/9.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <string> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc index 23ae07c6634..daf3c4f3bde 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <string> #include <testsuite_iterators.h> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2_c++17.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2_c++17.cc new file mode 100644 index 00000000000..63684de68a6 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2_c++17.cc @@ -0,0 +1,53 @@ +// { dg-options "-std=gnu++17" } +// { dg-do run { target c++17 } } + +// Copyright (C) 2011-2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// NOTE: This makes use of the fact that we know how moveable +// is implemented on string (via swap). If the implementation changed +// this test may begin to fail. + +#include <string> +#include <utility> +#include <testsuite_hooks.h> + +class tstring : public std::basic_string<wchar_t> +{ +public: + tstring() : std::basic_string<wchar_t>() {} + tstring(tstring&& s) : std::basic_string<wchar_t>(std::move(s)) {} + tstring& operator=(tstring&& s) = default; +}; + +void test01() +{ + tstring a, b; + a.push_back(L'1'); + b = std::move(a); + VERIFY( b.size() == 1 && b[0] == L'1' && a.size() == 0 ); + + tstring c(std::move(b)); + VERIFY( c.size() == 1 && c[0] == L'1' ); + VERIFY( b.size() == 0 ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc index 0cb4c79861b..e5737a30793 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <string_view> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc index d8322a8b274..7d88f56a021 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <string_view> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc index 8118b97468b..f2c971e1b02 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <string_view> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc index 27b6def1b05..c00ec83a20f 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <string_view> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc index 0049ae3ca0c..f6de2485287 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <string_view> diff --git a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc index efd280fea23..d404a1d08ae 100644 --- a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc +++ b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc @@ -1,5 +1,5 @@ // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // Copyright (C) 2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/23_containers/array/cons/deduction.cc b/libstdc++-v3/testsuite/23_containers/array/cons/deduction.cc index 5ce2909d832..79a99391814 100644 --- a/libstdc++-v3/testsuite/23_containers/array/cons/deduction.cc +++ b/libstdc++-v3/testsuite/23_containers/array/cons/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <array> diff --git a/libstdc++-v3/testsuite/23_containers/array/cons/deduction_neg.cc b/libstdc++-v3/testsuite/23_containers/array/cons/deduction_neg.cc index ec11b05a54c..16d66215085 100644 --- a/libstdc++-v3/testsuite/23_containers/array/cons/deduction_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/array/cons/deduction_neg.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <array> diff --git a/libstdc++-v3/testsuite/23_containers/deque/cons/deduction.cc b/libstdc++-v3/testsuite/23_containers/deque/cons/deduction.cc index c7c0f2e5ae1..c0e333b2e55 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/cons/deduction.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/cons/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <deque> #include <testsuite_iterators.h> diff --git a/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc b/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc index 935123e1345..c0dd778e6fd 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <deque> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/deduction.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/deduction.cc index ee30288678f..ff98d3e35b0 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/deduction.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <forward_list> #include <testsuite_iterators.h> diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/emplace_cxx17_return.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/emplace_cxx17_return.cc index eb0ffbd8fd8..0f7ea34c972 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/emplace_cxx17_return.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/emplace_cxx17_return.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <forward_list> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/list/cons/deduction.cc b/libstdc++-v3/testsuite/23_containers/list/cons/deduction.cc index c4df79526a8..cded2492d35 100644 --- a/libstdc++-v3/testsuite/23_containers/list/cons/deduction.cc +++ b/libstdc++-v3/testsuite/23_containers/list/cons/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <list> #include <testsuite_iterators.h> diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc index 3472c6d4287..02a7ee4a403 100644 --- a/libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc +++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <list> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/queue/members/emplace_cxx17_return.cc b/libstdc++-v3/testsuite/23_containers/queue/members/emplace_cxx17_return.cc index 53eb8a0d3d4..dce9d4284e7 100644 --- a/libstdc++-v3/testsuite/23_containers/queue/members/emplace_cxx17_return.cc +++ b/libstdc++-v3/testsuite/23_containers/queue/members/emplace_cxx17_return.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <queue> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/stack/members/emplace_cxx17_return.cc b/libstdc++-v3/testsuite/23_containers/stack/members/emplace_cxx17_return.cc index 8b9c8888a0a..a30c6fc33fc 100644 --- a/libstdc++-v3/testsuite/23_containers/stack/members/emplace_cxx17_return.cc +++ b/libstdc++-v3/testsuite/23_containers/stack/members/emplace_cxx17_return.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <stack> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc index ef38a727ae5..d6a8b25c209 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc @@ -30,7 +30,7 @@ struct E : std::equal_to<T> { }; using __gnu_test::CustomPointerAlloc; -// { dg-xfail-if "node reinsertion assumes raw pointers" { c++1z } } +// { dg-xfail-if "node reinsertion assumes raw pointers" { c++17 } } // TODO when removing this xfail change the test back to "dg-do run". template class std::unordered_set<T, H, E, CustomPointerAlloc<T>>; diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/emplace_cxx17_return.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/emplace_cxx17_return.cc index ea1745b9115..a653a26799f 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/emplace_cxx17_return.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/emplace_cxx17_return.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <vector> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/vector/cons/deduction.cc b/libstdc++-v3/testsuite/23_containers/vector/cons/deduction.cc index 413f02cc0cb..3125f824d16 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/cons/deduction.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/cons/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <vector> #include <testsuite_iterators.h> diff --git a/libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc b/libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc index ee906a9dd32..e8b51df935d 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <vector> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/24_iterators/container_access.cc b/libstdc++-v3/testsuite/24_iterators/container_access.cc index b8d0e80a2de..b90324582e9 100644 --- a/libstdc++-v3/testsuite/24_iterators/container_access.cc +++ b/libstdc++-v3/testsuite/24_iterators/container_access.cc @@ -1,4 +1,4 @@ -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } // { dg-options "-std=gnu++17" } // Copyright (C) 2015-2017 Free Software Foundation, Inc. diff --git a/libstdc++-v3/testsuite/24_iterators/range_access_cpp17.cc b/libstdc++-v3/testsuite/24_iterators/range_access_cpp17.cc index 1d5b0739007..cb6b1c41619 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_access_cpp17.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_access_cpp17.cc @@ -1,5 +1,5 @@ -// { dg-do compile { target c++1z } } // { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } // Copyright (C) 2017 Free Software Foundation, Inc. // @@ -47,7 +47,7 @@ void test03() { using std::reverse_iterator; - static std::initializer_list<int> il{1}; + static constexpr std::initializer_list<int> il{1}; static_assert(std::cbegin(il) == il.begin()); static_assert(std::cend(il) == il.end()); static_assert(std::rbegin(il) == reverse_iterator<const int*>(il.end())); diff --git a/libstdc++-v3/testsuite/25_algorithms/clamp/1.cc b/libstdc++-v3/testsuite/25_algorithms/clamp/1.cc index 991b10d1fe3..655c241e9a2 100644 --- a/libstdc++-v3/testsuite/25_algorithms/clamp/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/clamp/1.cc @@ -30,12 +30,12 @@ void test01() VERIFY( y == 3 ); VERIFY( z == 4 ); - const int xc = std::clamp(1, 2, 4, std::greater<int>()); - const int yc = std::clamp(3, 2, 4, std::greater<int>()); - const int zc = std::clamp(5, 2, 4, std::greater<int>()); - VERIFY( xc == 4 ); - VERIFY( yc == 2 ); - VERIFY( zc == 2 ); + const int xc = std::clamp(1, 4, 2, std::greater<int>()); + const int yc = std::clamp(3, 4, 2, std::greater<int>()); + const int zc = std::clamp(5, 4, 2, std::greater<int>()); + VERIFY( xc == 2 ); + VERIFY( yc == 3 ); + VERIFY( zc == 4 ); } int diff --git a/libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc b/libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc index 0864b8e1d30..606748ec689 100644 --- a/libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc +++ b/libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc @@ -27,5 +27,5 @@ # error "Feature-test macro for clamp has wrong value" #endif -static_assert(std::clamp(2, 0, 1) == 1, ""); -static_assert(std::clamp(2, 0, 1, std::greater<int>()) == 0, ""); +static_assert(std::clamp(2, 0, 1) == 1); +static_assert(std::clamp(2, 1, 0, std::greater<int>()) == 1); diff --git a/libstdc++-v3/testsuite/25_algorithms/sample/1.cc b/libstdc++-v3/testsuite/25_algorithms/sample/1.cc index 7b8700a339b..b5ec7a9c71c 100644 --- a/libstdc++-v3/testsuite/25_algorithms/sample/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/sample/1.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <algorithm> #include <random> diff --git a/libstdc++-v3/testsuite/25_algorithms/sample/2.cc b/libstdc++-v3/testsuite/25_algorithms/sample/2.cc index 94ded717e62..1660c154b6c 100644 --- a/libstdc++-v3/testsuite/25_algorithms/sample/2.cc +++ b/libstdc++-v3/testsuite/25_algorithms/sample/2.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #ifndef _GLIBCXX_ASSERTIONS // Make std::uniform_int_distribution check its parameters diff --git a/libstdc++-v3/testsuite/25_algorithms/sample/81221.cc b/libstdc++-v3/testsuite/25_algorithms/sample/81221.cc index 28ec0e3152a..c3938409adf 100644 --- a/libstdc++-v3/testsuite/25_algorithms/sample/81221.cc +++ b/libstdc++-v3/testsuite/25_algorithms/sample/81221.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // { dg-require-parallel-mode "" } #include <algorithm> diff --git a/libstdc++-v3/testsuite/25_algorithms/search/searcher.cc b/libstdc++-v3/testsuite/25_algorithms/search/searcher.cc index 794cdb9a678..1d9173f3b19 100644 --- a/libstdc++-v3/testsuite/25_algorithms/search/searcher.cc +++ b/libstdc++-v3/testsuite/25_algorithms/search/searcher.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } #include <algorithm> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/26_numerics/gcd/1.cc b/libstdc++-v3/testsuite/26_numerics/gcd/1.cc index 0f0b7b85b4e..cc89046e63b 100644 --- a/libstdc++-v3/testsuite/26_numerics/gcd/1.cc +++ b/libstdc++-v3/testsuite/26_numerics/gcd/1.cc @@ -15,8 +15,8 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-options "-std=gnu++1z" } -// { dg-do compile { target c++1z } } +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } #include <numeric> diff --git a/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc b/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc index d88f145d754..30524a1b06c 100644 --- a/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc +++ b/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc @@ -15,8 +15,8 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-options "-std=gnu++1z" } -// { dg-do compile { target c++1z } } +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } #include <numeric> diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/hypot.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/hypot.cc index c17ba97a00f..52009f79056 100644 --- a/libstdc++-v3/testsuite/26_numerics/headers/cmath/hypot.cc +++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/hypot.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } // { dg-xfail-run-if "AIX long double" { powerpc-ibm-aix* } } #include <cmath> diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc index 9f7960cc8d7..ab066dcf5d4 100644 --- a/libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc +++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc @@ -1,4 +1,4 @@ -// { dg-do compile { target { ! c++1z } } } +// { dg-do compile { target { ! c++17 } } } // Copyright (C) 2007-2017 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/26_numerics/lcm/1.cc b/libstdc++-v3/testsuite/26_numerics/lcm/1.cc index 367f0a3e0e3..2c3337e4c0d 100644 --- a/libstdc++-v3/testsuite/26_numerics/lcm/1.cc +++ b/libstdc++-v3/testsuite/26_numerics/lcm/1.cc @@ -15,8 +15,8 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-options "-std=gnu++1z" } -// { dg-do compile { target c++1z } } +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } #include <numeric> diff --git a/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc b/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc index 7a908a4568f..e16e6ae1ee9 100644 --- a/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc +++ b/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc @@ -15,8 +15,8 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-options "-std=gnu++1z" } -// { dg-do compile { target c++1z } } +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } #include <numeric> diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/deduction.cc b/libstdc++-v3/testsuite/26_numerics/valarray/deduction.cc index 72d4bc09126..f9e26970756 100644 --- a/libstdc++-v3/testsuite/26_numerics/valarray/deduction.cc +++ b/libstdc++-v3/testsuite/26_numerics/valarray/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <valarray> diff --git a/libstdc++-v3/testsuite/27_io/types/4.cc b/libstdc++-v3/testsuite/27_io/types/4.cc index ee1a77736ce..f04b2fa6bb4 100644 --- a/libstdc++-v3/testsuite/27_io/types/4.cc +++ b/libstdc++-v3/testsuite/27_io/types/4.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // In C++17 these names are not reserved by the library. #define io_state 1 diff --git a/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/deduction.cc b/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/deduction.cc index 63b3f67f5c9..76f63b7d175 100644 --- a/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/deduction.cc +++ b/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <regex> #include <testsuite_iterators.h> diff --git a/libstdc++-v3/testsuite/28_regex/simple_c++11.cc b/libstdc++-v3/testsuite/28_regex/simple_c++11.cc new file mode 100644 index 00000000000..2cfa503fc07 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/simple_c++11.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +#include <regex> + +// Ensure compilation of trivial example still works with C++11. +// https://gcc.gnu.org/ml/libstdc++/2017-09/msg00040.html +std::regex r{""}; +std::cmatch m; +bool b = regex_match("", m, r); diff --git a/libstdc++-v3/testsuite/30_threads/lock_guard/cons/deduction.cc b/libstdc++-v3/testsuite/30_threads/lock_guard/cons/deduction.cc index b72c1a12a40..a3e2d4d00f8 100644 --- a/libstdc++-v3/testsuite/30_threads/lock_guard/cons/deduction.cc +++ b/libstdc++-v3/testsuite/30_threads/lock_guard/cons/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <mutex> diff --git a/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/1.cc b/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/1.cc index e420ab08378..d9bdc5bf4a6 100644 --- a/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/1.cc +++ b/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/1.cc @@ -1,5 +1,5 @@ // { dg-options "-std=gnu++17" } -// { dg-do run { target c++1z } } +// { dg-do run { target c++17 } } // { dg-require-cstdint "" } // Copyright (C) 2017 Free Software Foundation, Inc. diff --git a/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/deduction.cc b/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/deduction.cc index 7d4f5bfc386..ddfb3a0fbd7 100644 --- a/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/deduction.cc +++ b/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <mutex> diff --git a/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/explicit_instantiation.cc index cbf10757f48..3961766369e 100644 --- a/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/explicit_instantiation.cc +++ b/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/explicit_instantiation.cc @@ -1,5 +1,5 @@ // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // { dg-require-cstdint "" } // { dg-require-gthreads "" } diff --git a/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc b/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc index b8a09042094..aa57fcbf431 100644 --- a/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc @@ -1,5 +1,5 @@ // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } // { dg-require-cstdint "" } // { dg-require-gthreads "" } diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/deduction.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/deduction.cc index 4f36bab9d6a..277bb43429c 100644 --- a/libstdc++-v3/testsuite/30_threads/unique_lock/cons/deduction.cc +++ b/libstdc++-v3/testsuite/30_threads/unique_lock/cons/deduction.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-std=gnu++17" } -// { dg-do compile { target c++1z } } +// { dg-do compile { target c++17 } } #include <mutex> diff --git a/libstdc++-v3/testsuite/experimental/filesystem/path/construct/string_view.cc b/libstdc++-v3/testsuite/experimental/filesystem/path/construct/string_view.cc index 6d55c027b01..fbf8bd4d6d3 100644 --- a/libstdc++-v3/testsuite/experimental/filesystem/path/construct/string_view.cc +++ b/libstdc++-v3/testsuite/experimental/filesystem/path/construct/string_view.cc @@ -1,5 +1,5 @@ -// { dg-options "-lstdc++fs -std=gnu++1z" } -// { dg-do run { target c++1z } } +// { dg-options "-lstdc++fs -std=gnu++17" } +// { dg-do run { target c++17 } } // { dg-require-filesystem-ts "" } // Copyright (C) 2016-2017 Free Software Foundation, Inc. diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand.cc index c5cdd1d8943..bff5a8517a9 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand.cc @@ -1,5 +1,5 @@ // __gnu_pbds::test::basic_type has ambiguous string conversions in C++17 -// { dg-do run { target { ! c++1z } } } +// { dg-do run { target { ! c++17 } } } // { dg-require-time "" } // This can take long on simulators, timing out the test. // { dg-options "-DITERATIONS=5" { target simulator } } diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand.cc index fc0d9aa6fc1..3b5d5e32a14 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand.cc @@ -1,5 +1,5 @@ // __gnu_pbds::test::basic_type has ambiguous string conversions in C++17 -// { dg-do run { target { ! c++1z } } } +// { dg-do run { target { ! c++17 } } } // { dg-require-time "" } // This can take long on simulators, timing out the test. // { dg-options "-DITERATIONS=5" { target simulator } } diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand.cc index 9058660cec3..cd5d653c3b0 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand.cc @@ -1,5 +1,5 @@ // __gnu_pbds::test::basic_type has ambiguous string conversions in C++17 -// { dg-do run { target { ! c++1z } } } +// { dg-do run { target { ! c++17 } } } // { dg-require-time "" } // -*- C++ -*- diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand.cc index fdf0effdba8..29dfb3709ac 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand.cc @@ -1,5 +1,5 @@ // __gnu_pbds::test::basic_type has ambiguous string conversions in C++17 -// { dg-do run { target { ! c++1z } } } +// { dg-do run { target { ! c++17 } } } // { dg-require-time "" } // -*- C++ -*- diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand.cc index f513b4fb4c0..c2b0c6b91ea 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand.cc @@ -1,5 +1,5 @@ // __gnu_pbds::test::basic_type has ambiguous string conversions in C++17 -// { dg-do run { target { ! c++1z } } } +// { dg-do run { target { ! c++17 } } } // { dg-require-time "" } // This can take long on simulators, timing out the test. // { dg-options "-DITERATIONS=5" { target simulator } } diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand.cc index f0436a8a675..20dcb6d6093 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand.cc @@ -1,5 +1,5 @@ // __gnu_pbds::test::basic_type has ambiguous string conversions in C++17 -// { dg-do run { target { ! c++1z } } } +// { dg-do run { target { ! c++17 } } } // { dg-require-time "" } // This can take long on simulators, timing out the test. // { dg-options "-DITERATIONS=5" { target simulator } } diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand.cc index a28c77966b3..5eba0ade962 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand.cc @@ -1,5 +1,5 @@ // __gnu_pbds::test::basic_type has ambiguous string conversions in C++17 -// { dg-do run { target { ! c++1z } } } +// { dg-do run { target { ! c++17 } } } // { dg-require-time "" } // This can take long on simulators, timing out the test. // { dg-options "-DITERATIONS=5" { target simulator } } diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand.cc index 70293689966..a06438ad532 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand.cc @@ -1,5 +1,5 @@ // __gnu_pbds::test::basic_type has ambiguous string conversions in C++17 -// { dg-do run { target { ! c++1z } } } +// { dg-do run { target { ! c++17 } } } // { dg-require-time "" } // This can take long on simulators, timing out the test. // { dg-options "-DITERATIONS=5" { target simulator } } diff --git a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand.cc b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand.cc index d3ee98349f6..e671aa015cf 100644 --- a/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand.cc +++ b/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand.cc @@ -1,5 +1,5 @@ // __gnu_pbds::test::basic_type has ambiguous string conversions in C++17 -// { dg-do run { target { ! c++1z } } } +// { dg-do run { target { ! c++17 } } } // { dg-require-time "" } // This can take long on simulators, timing out the test. // { dg-options "-DITERATIONS=5" { target simulator } } diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc index d31ae7e6eac..004738052e4 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc @@ -1,5 +1,5 @@ -// { dg-options "-g -O0 -std=gnu++1z" } -// { dg-do run { target c++1z } } +// { dg-options "-g -O0 -std=gnu++17" } +// { dg-do run { target c++17 } } // { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2014-2017 Free Software Foundation, Inc. |