diff options
author | Edward Smith-Rowland <3dw4rd@verizon.net> | 2014-10-01 11:49:23 +0000 |
---|---|---|
committer | Edward Smith-Rowland <emsr@gcc.gnu.org> | 2014-10-01 11:49:23 +0000 |
commit | a15f7cb8b8c124bb7c49ab9b8d29dfd62ea58d10 (patch) | |
tree | 0305f88949de10054e322e52911e9a53306c454d /libstdc++-v3 | |
parent | 5fbb36f4a4e85956c241dafe603f1fc1be10472e (diff) | |
download | gcc-a15f7cb8b8c124bb7c49ab9b8d29dfd62ea58d10.zip gcc-a15f7cb8b8c124bb7c49ab9b8d29dfd62ea58d10.tar.gz gcc-a15f7cb8b8c124bb7c49ab9b8d29dfd62ea58d10.tar.bz2 |
Implement SD-6: SG10 Feature Test Recommendations
2014-10-01 Edward Smith-Rowland <3dw4rd@verizon.net>
Implement SD-6: SG10 Feature Test Recommendations
* internal.h (lexer_state, spec_nodes): Add in__has_include__.
* directives.c: Support __has_include__ builtin.
* expr.c (parse_has_include): New function to parse __has_include__
builtin; (eval_token()): Use it.
* files.c (_cpp_has_header()): New funtion to look for header;
(open_file_failed()): Not an error to not find a header file for
__has_include__.
* identifiers.c (_cpp_init_hashtable()): Add entry for __has_include__.
* pch.c (cpp_read_state): Lookup __has_include__.
* traditional.c (enum ls, _cpp_scan_out_logical_line()): Walk through
__has_include__ statements.
2014-10-01 Edward Smith-Rowland <3dw4rd@verizon.net>
Implement SD-6: SG10 Feature Test Recommendations
* c-cppbuiltin.c (c_cpp_builtins()): Define language feature
macros and the __has_header macro.
2014-10-01 Edward Smith-Rowland <3dw4rd@verizon.net>
Implement SD-6: SG10 Feature Test Recommendations
* include/bits/basic_string.h: Add __cpp_lib feature test macro.
* include/bits/stl_algobase.h: Ditto.
* include/bits/stl_function.h: Ditto.
* include/bits/unique_ptr.h: Ditto.
* include/std/chrono: Ditto.
* include/std/complex: Ditto.
* include/std/iomanip: Ditto.
* include/std/shared_mutex: Ditto.
* include/std/tuple: Ditto.
* include/std/type_traits: Ditto.
* include/std/utility: Ditto.
* testsuite/experimental/feat-cxx14.cc: New.
* testsuite/experimental/feat-lib-fund.cc: New.
* testsuite/20_util/declval/requirements/1_neg.cc: Adjust.
* testsuite/20_util/duration/literals/range.cc: Adjust.
* testsuite/20_util/duration/requirements/typedefs_neg1.cc: Adjust.
* testsuite/20_util/duration/requirements/typedefs_neg2.cc: Adjust.
* testsuite/20_util/duration/requirements/typedefs_neg3.cc: Adjust.
* testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust.
* testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Adjust.
* testsuite/23_containers/array/tuple_interface/get_neg.cc: Adjust.
* testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc:
Adjust.
2014-10-01 Edward Smith-Rowland <3dw4rd@verizon.net>
Implement SD-6: SG10 Feature Test Recommendations
* g++.dg/cpp1y/feat-cxx11-neg.C: New.
* g++.dg/cpp1y/feat-cxx11.C: New.
* g++.dg/cpp1y/feat-cxx14.C: New.
* g++.dg/cpp1y/feat-cxx98.C: New.
* g++.dg/cpp1y/feat-cxx98-neg.C: New.
* g++.dg/cpp1y/phoobhar.h: New.
* g++.dg/cpp1y/testinc/phoobhar.h: New.
From-SVN: r215752
Diffstat (limited to 'libstdc++-v3')
23 files changed, 221 insertions, 13 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 73935c5..78609fa 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,30 @@ +2014-10-01 Edward Smith-Rowland <3dw4rd@verizon.net> + + Implement SD-6: SG10 Feature Test Recommendations + * include/bits/basic_string.h: Add __cpp_lib feature test macro. + * include/bits/stl_algobase.h: Ditto. + * include/bits/stl_function.h: Ditto. + * include/bits/unique_ptr.h: Ditto. + * include/std/chrono: Ditto. + * include/std/complex: Ditto. + * include/std/iomanip: Ditto. + * include/std/shared_mutex: Ditto. + * include/std/tuple: Ditto. + * include/std/type_traits: Ditto. + * include/std/utility: Ditto. + * testsuite/experimental/feat-cxx14.cc: New. + * testsuite/experimental/feat-lib-fund.cc: New. + * testsuite/20_util/declval/requirements/1_neg.cc: Adjust. + * testsuite/20_util/duration/literals/range.cc: Adjust. + * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Adjust. + * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Adjust. + * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Adjust. + * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust. + * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Adjust. + * testsuite/23_containers/array/tuple_interface/get_neg.cc: Adjust. + * testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc: + Adjust. + 2014-09-30 Siva Chandra Reddy <sivachandra@google.com> * python/hook.in: Only import libstdcxx.v6. diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index 93ceb6d..8918965 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -3140,6 +3140,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus > 201103L +#define __cpp_lib_string_udls 201304 + inline namespace literals { inline namespace string_literals diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index 5ff21be..f7c11e9 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -1091,6 +1091,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO } #if __cplusplus > 201103L + +#define __cpp_lib_robust_nonmodifying_seq_ops 201304 + /** * @brief Tests a range for element-wise equality. * @ingroup non_mutating_algorithms diff --git a/libstdc++-v3/include/bits/stl_function.h b/libstdc++-v3/include/bits/stl_function.h index 8703ce9..48f9bde 100644 --- a/libstdc++-v3/include/bits/stl_function.h +++ b/libstdc++-v3/include/bits/stl_function.h @@ -217,6 +217,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #if __cplusplus > 201103L + +#define __cpp_lib_transparent_operators 201210 +#define __cpp_lib_generic_associative_lookup 201304 + template<> struct plus<void> { diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h index c72fbc7..ce38c5a 100644 --- a/libstdc++-v3/include/bits/unique_ptr.h +++ b/libstdc++-v3/include/bits/unique_ptr.h @@ -743,6 +743,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #if __cplusplus > 201103L + +#define __cpp_lib_make_unique 201304 + template<typename _Tp> struct _MakeUniq { typedef unique_ptr<_Tp> __single_object; }; diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono index 88eaa16..62844d6 100644 --- a/libstdc++-v3/include/std/chrono +++ b/libstdc++-v3/include/std/chrono @@ -782,6 +782,8 @@ _GLIBCXX_END_NAMESPACE_VERSION #if __cplusplus > 201103L +#define __cpp_lib_chrono_udls 201304 + inline namespace literals { inline namespace chrono_literals diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex index f6d1de5..bf302c1 100644 --- a/libstdc++-v3/include/std/complex +++ b/libstdc++-v3/include/std/complex @@ -1934,6 +1934,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline namespace literals { inline namespace complex_literals { +#define __cpp_lib_complex_udls 201309 + constexpr std::complex<float> operator""if(long double __num) { return std::complex<float>{0.0F, static_cast<float>(__num)}; } diff --git a/libstdc++-v3/include/std/iomanip b/libstdc++-v3/include/std/iomanip index 2adfeda..9625d43 100644 --- a/libstdc++-v3/include/std/iomanip +++ b/libstdc++-v3/include/std/iomanip @@ -339,6 +339,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus > 201103L +#define __cpp_lib_quoted_string_io 201304 + _GLIBCXX_END_NAMESPACE_VERSION namespace __detail { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/std/shared_mutex b/libstdc++-v3/include/std/shared_mutex index 53b39f8..6405f10 100644 --- a/libstdc++-v3/include/std/shared_mutex +++ b/libstdc++-v3/include/std/shared_mutex @@ -52,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ #if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) + +#define __cpp_lib_shared_timed_mutex 201402 + /// shared_timed_mutex class shared_timed_mutex { diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple index 6c1032f..6be7f23 100644 --- a/libstdc++-v3/include/std/tuple +++ b/libstdc++-v3/include/std/tuple @@ -746,6 +746,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #if __cplusplus > 201103L + +#define __cpp_lib_tuples_by_type 201304 + template<typename _Head, size_t __i, typename... _Tail> constexpr _Head& __get_helper2(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index da8a95f..86dd6f9 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -73,6 +73,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef integral_constant<_Tp, __v> type; constexpr operator value_type() const { return value; } #if __cplusplus > 201103L + +#define __cpp_lib_integral_constant_callable 201304 + constexpr value_type operator()() const { return value; } #endif }; @@ -480,6 +483,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct is_function<_Res(_ArgTypes......) const volatile &&> : public true_type { }; +#define __cpp_lib_is_null_pointer 201309 + template<typename> struct __is_null_pointer_helper : public false_type { }; @@ -1451,6 +1456,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #if __cplusplus > 201103L + +#define __cpp_lib_transformation_trait_aliases 201304 + /// Alias template for remove_const template<typename _Tp> using remove_const_t = typename remove_const<_Tp>::type; @@ -2090,6 +2098,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Sfinae-friendly result_of implementation: +#define __cpp_lib_result_of_sfinae 201210 + // [func.require] paragraph 1 bullet 1: struct __result_of_memfun_ref_impl { diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility index cb7e112..a244ec6 100644 --- a/libstdc++-v3/include/std/utility +++ b/libstdc++-v3/include/std/utility @@ -70,6 +70,7 @@ #include <bits/stl_pair.h> #if __cplusplus >= 201103L + #include <bits/move.h> #include <initializer_list> @@ -157,6 +158,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __pair_get<_Int>::__const_get(__in); } #if __cplusplus > 201103L + +#define __cpp_lib_tuples_by_type 201304 + template <typename _Tp, typename _Up> constexpr _Tp& get(pair<_Tp, _Up>& __p) noexcept @@ -187,6 +191,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION get(pair<_Up, _Tp>&& __p) noexcept { return std::move(__p.second); } +#define __cpp_lib_exchange_function 201304 + /// Assign @p __new_val to @p __obj and return its previous value. template <typename _Tp, typename _Up = _Tp> inline _Tp @@ -216,6 +222,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; #if __cplusplus > 201103L + +#define __cpp_lib_integer_sequence 201304 + /// Class template integer_sequence template<typename _Tp, _Tp... _Idx> struct integer_sequence 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 774858c..3710020 100644 --- a/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc +++ b/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc @@ -19,7 +19,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-error "static assertion failed" "" { target *-*-* } 2082 } +// { dg-error "static assertion failed" "" { target *-*-* } 2088 } #include <utility> diff --git a/libstdc++-v3/testsuite/20_util/duration/literals/range.cc b/libstdc++-v3/testsuite/20_util/duration/literals/range.cc index c005df6..9a897bc 100644 --- a/libstdc++-v3/testsuite/20_util/duration/literals/range.cc +++ b/libstdc++-v3/testsuite/20_util/duration/literals/range.cc @@ -27,5 +27,5 @@ test01() // std::numeric_limits<int64_t>::max() == 9223372036854775807; auto h = 9223372036854775808h; - // { dg-error "cannot be represented" "" { target *-*-* } 794 } + // { dg-error "cannot be represented" "" { target *-*-* } 799 } } diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc index 774885a..a91eca4 100644 --- a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc +++ b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc @@ -31,5 +31,5 @@ void test01() test_type d; } -// { dg-error "rep cannot be a duration" "" { target *-*-* } 246 } +// { dg-error "rep cannot be a duration" "" { target *-*-* } 249 } // { dg-error "required from here" "" { target *-*-* } 31 } diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc index 3ffaf40..b712ed4 100644 --- a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc +++ b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc @@ -32,5 +32,5 @@ void test01() test_type d; // { dg-error "required from here" } } -// { dg-error "must be a specialization of ratio" "" { target *-*-* } 247 } +// { dg-error "must be a specialization of ratio" "" { target *-*-* } 250 } // { dg-prune-output "not a member" } diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc index 7c9d127..a25e0da 100644 --- a/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc +++ b/libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc @@ -33,5 +33,5 @@ void test01() test_type d; } -// { dg-error "period must be positive" "" { target *-*-* } 249 } +// { dg-error "period must be positive" "" { target *-*-* } 252 } // { dg-error "required from here" "" { target *-*-* } 33 } 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 d711546..9a3ea8b 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 @@ -48,5 +48,5 @@ void test01() // { dg-error "required from here" "" { target *-*-* } 40 } // { dg-error "required from here" "" { target *-*-* } 42 } -// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1747 } -// { dg-error "declaration of" "" { target *-*-* } 1711 } +// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1753 } +// { dg-error "declaration of" "" { target *-*-* } 1717 } 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 c77205b..8539e7a 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 @@ -48,5 +48,5 @@ void test01() // { dg-error "required from here" "" { target *-*-* } 40 } // { dg-error "required from here" "" { target *-*-* } 42 } -// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1650 } -// { dg-error "declaration of" "" { target *-*-* } 1614 } +// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1656 } +// { dg-error "declaration of" "" { target *-*-* } 1620 } diff --git a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc index 979d7f6..9a3a245 100644 --- a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc @@ -28,6 +28,6 @@ int n1 = std::get<1>(a); int n2 = std::get<1>(std::move(a)); int n3 = std::get<1>(ca); -// { dg-error "static assertion failed" "" { target *-*-* } 274 } -// { dg-error "static assertion failed" "" { target *-*-* } 283 } -// { dg-error "static assertion failed" "" { target *-*-* } 291 } +// { dg-error "static assertion failed" "" { target *-*-* } 277 } +// { dg-error "static assertion failed" "" { target *-*-* } 286 } +// { dg-error "static assertion failed" "" { target *-*-* } 294 } diff --git a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc index 4b1e5ae..6aff502 100644 --- a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc @@ -23,4 +23,4 @@ typedef std::tuple_element<1, std::array<int, 1>>::type type; -// { dg-error "static assertion failed" "" { target *-*-* } 322 } +// { dg-error "static assertion failed" "" { target *-*-* } 325 } diff --git a/libstdc++-v3/testsuite/experimental/feat-cxx14.cc b/libstdc++-v3/testsuite/experimental/feat-cxx14.cc new file mode 100644 index 0000000..b97ecc5 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/feat-cxx14.cc @@ -0,0 +1,113 @@ +// { dg-options "-std=gnu++14" } +// { dg-do compile } + +#include <utility> +#include <tuple> +#include <memory> +#include <functional> +#include <type_traits> +#include <chrono> +#include <string> +#include <complex> +#include <iomanip> +#include <shared_mutex> + +#ifndef __cpp_lib_integer_sequence +# error "__cpp_lib_integer_sequence" +#elif __cpp_lib_integer_sequence != 201304 +# error "__cpp_lib_integer_sequence != 201304" +#endif + +#ifndef __cpp_lib_exchange_function +# error "__cpp_lib_exchange_function" +#elif __cpp_lib_exchange_function != 201304 +# error "__cpp_lib_exchange_function != 201304" +#endif + +#ifndef __cpp_lib_tuples_by_type +# error "__cpp_lib_tuples_by_type" +#elif __cpp_lib_tuples_by_type != 201304 +# error "__cpp_lib_tuples_by_type != 201304" +#endif + +#ifndef __cpp_lib_make_unique +# error "__cpp_lib_make_unique" +#elif __cpp_lib_make_unique != 201304 +# error "__cpp_lib_make_unique != 201304" +#endif + +#ifndef __cpp_lib_transparent_operators +# error "__cpp_lib_transparent_operators" +#elif __cpp_lib_transparent_operators != 201210 +# error "__cpp_lib_transparent_operators != 201210" +#endif + +#ifndef __cpp_lib_result_of_sfinae +# error "__cpp_lib_result_of_sfinae" +#elif __cpp_lib_result_of_sfinae != 201210 +# error "__cpp_lib_result_of_sfinae != 201210" +#endif + +#ifndef __cpp_lib_integral_constant_callable +# error "__cpp_lib_integral_constant_callable" +#elif __cpp_lib_integral_constant_callable != 201304 +# error "__cpp_lib_integral_constant_callable != 201304" +#endif + +#ifndef __cpp_lib_transformation_trait_aliases +# error "__cpp_lib_transformation_trait_aliases" +#elif __cpp_lib_transformation_trait_aliases != 201304 +# error "__cpp_lib_transformation_trait_aliases != 201304" +#endif + +#ifndef __cpp_lib_chrono_udls +# error "__cpp_lib_chrono_udls" +#elif __cpp_lib_chrono_udls != 201304 +# error "__cpp_lib_chrono_udls != 201304" +#endif + +#ifndef __cpp_lib_string_udls +# error "__cpp_lib_string_udls" +#elif __cpp_lib_string_udls != 201304 +# error "__cpp_lib_string_udls != 201304" +#endif + +#ifndef __cpp_lib_complex_udls +# error "__cpp_lib_complex_udls" +#elif __cpp_lib_complex_udls != 201309 +# error "__cpp_lib_complex_udls != 201309" +#endif + +#ifndef __cpp_lib_generic_associative_lookup +# error "__cpp_lib_generic_associative_lookup" +#elif __cpp_lib_generic_associative_lookup != 201304 +# error "__cpp_lib_generic_associative_lookup != 201304" +#endif + +//#ifndef __cpp_lib_null_iterators +//# error "__cpp_lib_null_iterators" +//#elif __cpp_lib_null_iterators != 201304 +//# error "__cpp_lib_null_iterators != 201304" +//#endif + +#ifndef __cpp_lib_robust_nonmodifying_seq_ops +# error "__cpp_lib_robust_nonmodifying_seq_ops" +#elif __cpp_lib_robust_nonmodifying_seq_ops != 201304 +# error "__cpp_lib_robust_nonmodifying_seq_ops != 201304" +#endif + +#ifndef __cpp_lib_quoted_string_io +# error "__cpp_lib_quoted_string_io" +#elif __cpp_lib_quoted_string_io != 201304 +# error "__cpp_lib_quoted_string_io != 201304" +#endif + +#if !__has_include(<shared_mutex>) +# error "<shared_mutex>" +#endif + +#ifndef __cpp_lib_shared_timed_mutex +# error "__cpp_lib_shared_timed_mutex" +#elif __cpp_lib_shared_timed_mutex != 201402 +# error "__cpp_lib_shared_timed_mutex != 201402" +#endif diff --git a/libstdc++-v3/testsuite/experimental/feat-lib-fund.cc b/libstdc++-v3/testsuite/experimental/feat-lib-fund.cc new file mode 100644 index 0000000..ac8560d --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/feat-lib-fund.cc @@ -0,0 +1,25 @@ +// { dg-options "-std=gnu++14" } +// { dg-do compile } + +#include <experimental/optional> +#include <experimental/string_view> + +#if !__has_include(<experimental/optional>) +# error "<experimental/optional>" +#endif + +//#if !__has_include(<experimental/net>) +//# error "<experimental/net>" +//#endif + +//#if !__has_include(<experimental/any>) +//# error "<experimental/any>" +//#endif + +//#if !__has_include(<experimental/memory_resource>) +//# error "<experimental/memory_resource>" +//#endif + +#if !__has_include(<experimental/string_view>) +# error "<experimental/string_view>" +#endif |