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
This commit is contained in:
parent
803f46c922
commit
6b17203a20
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
65
libstdc++-v3/include/experimental/chrono
Normal file
65
libstdc++-v3/include/experimental/chrono
Normal file
@ -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
|
73
libstdc++-v3/include/experimental/ratio
Normal file
73
libstdc++-v3/include/experimental/ratio
Normal file
@ -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
|
65
libstdc++-v3/include/experimental/system_error
Normal file
65
libstdc++-v3/include/experimental/system_error
Normal file
@ -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
|
@ -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)
|
||||
|
34
libstdc++-v3/testsuite/experimental/chrono/value.cc
Normal file
34
libstdc++-v3/testsuite/experimental/chrono/value.cc
Normal file
@ -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, "");
|
50
libstdc++-v3/testsuite/experimental/ratio/value.cc
Normal file
50
libstdc++-v3/testsuite/experimental/ratio/value.cc
Normal file
@ -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, "");
|
40
libstdc++-v3/testsuite/experimental/system_error/value.cc
Normal file
40
libstdc++-v3/testsuite/experimental/system_error/value.cc
Normal file
@ -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, "");
|
34
libstdc++-v3/testsuite/experimental/tuple/tuple_size.cc
Normal file
34
libstdc++-v3/testsuite/experimental/tuple/tuple_size.cc
Normal file
@ -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, "");
|
Loading…
Reference in New Issue
Block a user