diff options
author | Ville Voutilainen <ville.voutilainen@gmail.com> | 2014-10-21 16:10:51 +0300 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2014-10-21 14:10:51 +0100 |
commit | 6b17203a20c907fd7736f3f5c8bfe34731e8efba (patch) | |
tree | 35989753521e889209bd245d8e56877162b4b012 | |
parent | 803f46c9223acc3ab7b600d5d7337ad95c0d1642 (diff) | |
download | gcc-6b17203a20c907fd7736f3f5c8bfe34731e8efba.zip gcc-6b17203a20c907fd7736f3f5c8bfe34731e8efba.tar.gz gcc-6b17203a20c907fd7736f3f5c8bfe34731e8efba.tar.bz2 |
Implement more Library Fundamentals v1 variable templates.
2014-10-21 Ville Voutilainen <ville.voutilainen@gmail.com>
Implement more Library Fundamentals v1 variable templates.
* include/Makefile.am: Add ratio, chrono and system_error.
* include/Makefile.in: Regenerate.
* include/experimental/chrono: New.
* include/experimental/ratio: Likewise.
* include/experimental/system_error: Likewise.
* include/experimental/tuple (tuple_size_v): Likewise.
* testsuite/experimental/chrono/value.cc: Likewise.
* testsuite/experimental/ratio/value.cc: Likewise.
* testsuite/experimental/system_error/value.cc: Likewise.
* testsuite/experimental/tuple/tuple_size.cc: Likewise.
From-SVN: r216513
-rw-r--r-- | libstdc++-v3/ChangeLog | 14 | ||||
-rw-r--r-- | libstdc++-v3/include/Makefile.am | 3 | ||||
-rw-r--r-- | libstdc++-v3/include/Makefile.in | 3 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/chrono | 65 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/ratio | 73 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/system_error | 65 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/tuple | 3 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/experimental/chrono/value.cc | 34 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/experimental/ratio/value.cc | 50 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/experimental/system_error/value.cc | 40 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/experimental/tuple/tuple_size.cc | 34 |
11 files changed, 384 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index cedde0f..34b7e15 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2014-10-21 Ville Voutilainen <ville.voutilainen@gmail.com> + + Implement more Library Fundamentals v1 variable templates. + * include/Makefile.am: Add ratio, chrono and system_error. + * include/Makefile.in: Regenerate. + * include/experimental/chrono: New. + * include/experimental/ratio: Likewise. + * include/experimental/system_error: Likewise. + * include/experimental/tuple (tuple_size_v): Likewise. + * testsuite/experimental/chrono/value.cc: Likewise. + * testsuite/experimental/ratio/value.cc: Likewise. + * testsuite/experimental/system_error/value.cc: Likewise. + * testsuite/experimental/tuple/tuple_size.cc: Likewise. + 2014-10-20 Jonathan Wakely <jwakely@redhat.com> * src/c++98/Makefile.am: Move ctype.cc, ctype_configure_char.cc and diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 1ee8ddc..89fa436 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -640,8 +640,11 @@ experimental_srcdir = ${glibcxx_srcdir}/include/experimental experimental_builddir = ./experimental experimental_headers = \ ${experimental_srcdir}/any \ + ${experimental_srcdir}/chrono \ ${experimental_srcdir}/optional \ + ${experimental_srcdir}/ratio \ ${experimental_srcdir}/string_view \ + ${experimental_srcdir}/system_error \ ${experimental_srcdir}/string_view.tcc \ ${experimental_srcdir}/tuple \ ${experimental_srcdir}/type_traits diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index a2262e8..bf10d6f 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -906,8 +906,11 @@ experimental_srcdir = ${glibcxx_srcdir}/include/experimental experimental_builddir = ./experimental experimental_headers = \ ${experimental_srcdir}/any \ + ${experimental_srcdir}/chrono \ ${experimental_srcdir}/optional \ + ${experimental_srcdir}/ratio \ ${experimental_srcdir}/string_view \ + ${experimental_srcdir}/system_error \ ${experimental_srcdir}/string_view.tcc \ ${experimental_srcdir}/tuple \ ${experimental_srcdir}/type_traits diff --git a/libstdc++-v3/include/experimental/chrono b/libstdc++-v3/include/experimental/chrono new file mode 100644 index 0000000..4754ea0 --- /dev/null +++ b/libstdc++-v3/include/experimental/chrono @@ -0,0 +1,65 @@ +// Variable Templates For chrono -*- C++ -*- + +// Copyright (C) 2014 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. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// <http://www.gnu.org/licenses/>. + +/** @file experimental/chrono + * This is a TS C++ Library header. + */ + +// +// N3932 Variable Templates For Type Traits (Revision 1) +// + +#ifndef _GLIBCXX_EXPERIMENTAL_CHRONO +#define _GLIBCXX_EXPERIMENTAL_CHRONO 1 + +#pragma GCC system_header + +#if __cplusplus <= 201103L +# include <bits/c++14_warning.h> +#else + +#include <chrono> + + +namespace std _GLIBCXX_VISIBILITY(default) +{ +namespace chrono { +namespace experimental +{ +inline namespace fundamentals_v1 +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +// See C++14 §20.12.4, customization traits +template <typename _Rep> + constexpr bool treat_as_floating_point_v = + treat_as_floating_point<_Rep>::value; +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace fundamentals_v1 +} // namespace experimental +} // namespace chrono +} // namespace std + +#endif // __cplusplus <= 201103L + +#endif // _GLIBCXX_EXPERIMENTAL_CHRONO diff --git a/libstdc++-v3/include/experimental/ratio b/libstdc++-v3/include/experimental/ratio new file mode 100644 index 0000000..1f2080b --- /dev/null +++ b/libstdc++-v3/include/experimental/ratio @@ -0,0 +1,73 @@ +// Variable Templates For ratio -*- C++ -*- + +// Copyright (C) 2014 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. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// <http://www.gnu.org/licenses/>. + +/** @file experimental/ratio + * This is a TS C++ Library header. + */ + +// +// N3932 Variable Templates For Type Traits (Revision 1) +// + +#ifndef _GLIBCXX_EXPERIMENTAL_RATIO +#define _GLIBCXX_EXPERIMENTAL_RATIO 1 + +#pragma GCC system_header + +#if __cplusplus <= 201103L +# include <bits/c++14_warning.h> +#else + +#include <ratio> + + +namespace std _GLIBCXX_VISIBILITY(default) +{ +namespace experimental +{ +inline namespace fundamentals_v1 +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +// See C++14 §20.11.5, ratio comparison +template <typename _R1, typename _R2> + constexpr bool ratio_equal_v = ratio_equal<_R1, _R2>::value; +template <typename _R1, typename _R2> + constexpr bool ratio_not_equal_v = ratio_not_equal<_R1, _R2>::value; +template <typename _R1, typename _R2> + constexpr bool ratio_less_v = ratio_less<_R1, _R2>::value; +template <typename _R1, typename _R2> + constexpr bool ratio_less_equal_v = ratio_less_equal<_R1, _R2>::value; +template <typename _R1, typename _R2> + constexpr bool ratio_greater_v = ratio_greater<_R1, _R2>::value; +template <typename _R1, typename _R2> + constexpr bool ratio_greater_equal_v = ratio_greater_equal<_R1, _R2>::value; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace fundamentals_v1 +} // namespace experimental +} // namespace std + +#endif // __cplusplus <= 201103L + +#endif // _GLIBCXX_EXPERIMENTAL_RATIO diff --git a/libstdc++-v3/include/experimental/system_error b/libstdc++-v3/include/experimental/system_error new file mode 100644 index 0000000..3f879da --- /dev/null +++ b/libstdc++-v3/include/experimental/system_error @@ -0,0 +1,65 @@ +// Variable Templates For system_error -*- C++ -*- + +// Copyright (C) 2014 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. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// <http://www.gnu.org/licenses/>. + +/** @file experimental/system_error + * This is a TS C++ Library header. + */ + +// +// N3932 Variable Templates For Type Traits (Revision 1) +// + +#ifndef _GLIBCXX_EXPERIMENTAL_SYSTEM_ERROR +#define _GLIBCXX_EXPERIMENTAL_CHRONO 1 + +#pragma GCC system_header + +#if __cplusplus <= 201103L +# include <bits/c++14_warning.h> +#else + +#include <system_error> + + +namespace std _GLIBCXX_VISIBILITY(default) +{ +namespace experimental +{ +inline namespace fundamentals_v1 +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +// See C++14 §19.5, System error support +template <typename _Tp> + constexpr bool is_error_code_enum_v = is_error_code_enum<_Tp>::value; +template <typename _Tp> + constexpr bool is_error_condition_enum_v = + is_error_condition_enum<_Tp>::value; +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace fundamentals_v1 +} // namespace experimental +} // namespace std + +#endif // __cplusplus <= 201103L + +#endif // _GLIBCXX_EXPERIMENTAL_SYSTEM_ERROR diff --git a/libstdc++-v3/include/experimental/tuple b/libstdc++-v3/include/experimental/tuple index bbfbdfa..da756b8 100644 --- a/libstdc++-v3/include/experimental/tuple +++ b/libstdc++-v3/include/experimental/tuple @@ -44,6 +44,9 @@ namespace experimental inline namespace fundamentals_v1 { _GLIBCXX_BEGIN_NAMESPACE_VERSION + // See C++14 §20.4.2.5, tuple helper classes + template <typename _Tp> + constexpr size_t tuple_size_v = tuple_size<_Tp>::value; template <typename _Fn, typename _Tuple, std::size_t... _Idx> constexpr decltype(auto) diff --git a/libstdc++-v3/testsuite/experimental/chrono/value.cc b/libstdc++-v3/testsuite/experimental/chrono/value.cc new file mode 100644 index 0000000..c06c12a --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/chrono/value.cc @@ -0,0 +1,34 @@ +// { dg-options "-std=gnu++14" } +// { dg-do compile } + +// Copyright (C) 2014 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 moved_to of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <experimental/chrono> + +using namespace std::chrono; +using namespace std::chrono::experimental; + +// These tests are rather simple, the front-end tests already test +// variable templates, and the library tests for the underlying +// traits are more elaborate. These are just simple sanity tests. + +static_assert(!treat_as_floating_point_v<int> + && !treat_as_floating_point<int>::value, ""); + +static_assert(treat_as_floating_point_v<double> + && treat_as_floating_point<double>::value, ""); diff --git a/libstdc++-v3/testsuite/experimental/ratio/value.cc b/libstdc++-v3/testsuite/experimental/ratio/value.cc new file mode 100644 index 0000000..4c8bdd7 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/ratio/value.cc @@ -0,0 +1,50 @@ +// { dg-options "-std=gnu++14" } +// { dg-do compile } + +// Copyright (C) 2014 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 moved_to of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <experimental/ratio> + +using namespace std; +using namespace std::experimental; + +// These tests are rather simple, the front-end tests already test +// variable templates, and the library tests for the underlying +// traits are more elaborate. These are just simple sanity tests. + +static_assert(ratio_equal_v<ratio<1, 3>, ratio<2, 6>> + && ratio_equal<ratio<1, 3>, ratio<2, 6>>::value, ""); + +static_assert(ratio_not_equal_v<ratio<1, 3>, ratio<2, 5>> + && ratio_not_equal<ratio<1, 3>, ratio<2, 5>>::value, ""); + +static_assert(ratio_less_v<ratio<1, 4>, ratio<1, 3>> + && ratio_less<ratio<1, 4>, ratio<1, 3>>::value, ""); + +static_assert(ratio_less_equal_v<ratio<1, 4>, ratio<1, 4>> + && ratio_less_equal_v<ratio<1, 4>, ratio<1, 3>> + && ratio_less_equal<ratio<1, 4>, ratio<1, 4>>::value + && ratio_less_equal<ratio<1, 4>, ratio<1, 3>>::value, ""); + +static_assert(ratio_greater_v<ratio<1, 3>, ratio<1, 4>> + && ratio_greater<ratio<1, 3>, ratio<1, 4>>::value, ""); + +static_assert(ratio_greater_equal_v<ratio<1, 4>, ratio<1, 4>> + && ratio_greater_equal_v<ratio<1, 3>, ratio<1, 4>> + && ratio_greater_equal<ratio<1, 4>, ratio<1, 4>>::value + && ratio_greater_equal<ratio<1, 3>, ratio<1, 4>>::value, ""); diff --git a/libstdc++-v3/testsuite/experimental/system_error/value.cc b/libstdc++-v3/testsuite/experimental/system_error/value.cc new file mode 100644 index 0000000..66b40fb --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/system_error/value.cc @@ -0,0 +1,40 @@ +// { dg-options "-std=gnu++14" } +// { dg-do compile } + +// Copyright (C) 2014 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 moved_to of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <experimental/system_error> +#include <future> +using namespace std; +using namespace std::experimental; + +// These tests are rather simple, the front-end tests already test +// variable templates, and the library tests for the underlying +// traits are more elaborate. These are just simple sanity tests. + +static_assert(is_error_code_enum_v<future_errc> + && is_error_code_enum<future_errc>::value, ""); + +static_assert(!is_error_code_enum_v<int> + && !is_error_code_enum<int>::value, ""); + +static_assert(is_error_condition_enum_v<errc> + && is_error_condition_enum<errc>::value, ""); + +static_assert(!is_error_condition_enum_v<int> + && !is_error_condition_enum<int>::value, ""); diff --git a/libstdc++-v3/testsuite/experimental/tuple/tuple_size.cc b/libstdc++-v3/testsuite/experimental/tuple/tuple_size.cc new file mode 100644 index 0000000..604e2c9 --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/tuple/tuple_size.cc @@ -0,0 +1,34 @@ +// { dg-options "-std=gnu++14" } +// { dg-do compile } + +// Copyright (C) 2014 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 moved_to of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <experimental/tuple> + +using namespace std; +using namespace std::experimental; + +// These tests are rather simple, the front-end tests already test +// variable templates, and the library tests for the underlying +// traits are more elaborate. These are just simple sanity tests. + +static_assert(tuple_size_v<tuple<int>> == 1 + && tuple_size<tuple<int>>::value == 1, ""); + +static_assert(tuple_size_v<tuple<int, int>> == 2 + && tuple_size<tuple<int, int>>::value == 2, ""); |