diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index cedde0fb55c..34b7e159940 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2014-10-21 Ville Voutilainen + + 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 * 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 1ee8ddcb38d..89fa4364ebc 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 a2262e898c4..bf10d6f45d8 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 00000000000..4754ea0a308 --- /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 +// . + +/** @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 +#else + +#include + + +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 + 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 00000000000..1f2080b4c95 --- /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 +// . + +/** @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 +#else + +#include + + +namespace std _GLIBCXX_VISIBILITY(default) +{ +namespace experimental +{ +inline namespace fundamentals_v1 +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +// See C++14 §20.11.5, ratio comparison +template + constexpr bool ratio_equal_v = ratio_equal<_R1, _R2>::value; +template + constexpr bool ratio_not_equal_v = ratio_not_equal<_R1, _R2>::value; +template + constexpr bool ratio_less_v = ratio_less<_R1, _R2>::value; +template + constexpr bool ratio_less_equal_v = ratio_less_equal<_R1, _R2>::value; +template + constexpr bool ratio_greater_v = ratio_greater<_R1, _R2>::value; +template + 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 00000000000..3f879dae038 --- /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 +// . + +/** @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 +#else + +#include + + +namespace std _GLIBCXX_VISIBILITY(default) +{ +namespace experimental +{ +inline namespace fundamentals_v1 +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +// See C++14 §19.5, System error support +template + constexpr bool is_error_code_enum_v = is_error_code_enum<_Tp>::value; +template + 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 bbfbdfa52dc..da756b85498 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 + constexpr size_t tuple_size_v = tuple_size<_Tp>::value; template 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 00000000000..c06c12a4c1b --- /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 +// . + +#include + +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 + && !treat_as_floating_point::value, ""); + +static_assert(treat_as_floating_point_v + && treat_as_floating_point::value, ""); diff --git a/libstdc++-v3/testsuite/experimental/ratio/value.cc b/libstdc++-v3/testsuite/experimental/ratio/value.cc new file mode 100644 index 00000000000..4c8bdd7a360 --- /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 +// . + +#include + +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<2, 6>> + && ratio_equal, ratio<2, 6>>::value, ""); + +static_assert(ratio_not_equal_v, ratio<2, 5>> + && ratio_not_equal, ratio<2, 5>>::value, ""); + +static_assert(ratio_less_v, ratio<1, 3>> + && ratio_less, ratio<1, 3>>::value, ""); + +static_assert(ratio_less_equal_v, ratio<1, 4>> + && ratio_less_equal_v, ratio<1, 3>> + && ratio_less_equal, ratio<1, 4>>::value + && ratio_less_equal, ratio<1, 3>>::value, ""); + +static_assert(ratio_greater_v, ratio<1, 4>> + && ratio_greater, ratio<1, 4>>::value, ""); + +static_assert(ratio_greater_equal_v, ratio<1, 4>> + && ratio_greater_equal_v, ratio<1, 4>> + && ratio_greater_equal, ratio<1, 4>>::value + && ratio_greater_equal, 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 00000000000..66b40fbf60f --- /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 +// . + +#include +#include +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 + && is_error_code_enum::value, ""); + +static_assert(!is_error_code_enum_v + && !is_error_code_enum::value, ""); + +static_assert(is_error_condition_enum_v + && is_error_condition_enum::value, ""); + +static_assert(!is_error_condition_enum_v + && !is_error_condition_enum::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 00000000000..604e2c9bc38 --- /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 +// . + +#include + +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> == 1 + && tuple_size>::value == 1, ""); + +static_assert(tuple_size_v> == 2 + && tuple_size>::value == 2, "");