This is my first shot at library patches. Do tell me if there's anything massively wrong. Tested on x86_64-linux.
2014-03-09 Ville Voutilainen <ville.voutilai...@gmail.com> Implement is_trivially_default_constructible. * doc/xml/manual/status_cxx2011.xml: Remove mention of is_trivially_default_cons tructible not being implemented * include/std/type_traits (is_trivially_default_constructible): New. * testsuite/20_util/is_trivially_default_constructible/value.cc: New.
diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2011.xml b/libstdc++-v3/doc/xml/manual/status_cxx2011.xml index b3c24d8..aaa4887 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx2011.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx2011.xml @@ -816,7 +816,7 @@ particular release. <entry>Type properties</entry> <entry>Partial</entry> <entry>Missing is_trivially_copyable, - is_trivially_constructible, is_trivially_default_constructible, + is_trivially_constructible, is_trivially_copy_constructible, is_trivially_move_constructible, is_trivially_assignable, is_trivially_default_assignable, is_trivially_copy_assignable, is_trivially_move_assignable diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 4b434a6..b529ee6 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -1258,7 +1258,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// is_trivially_constructible (still unimplemented) - /// is_trivially_default_constructible (still unimplemented) + /// is_trivially_default_constructible + template<typename _Tp> + struct is_trivially_default_constructible + : public __and_<is_constructible<_Tp>, integral_constant<bool, + __has_trivial_constructor(_Tp)>>::type + { }; /// is_trivially_copy_constructible (still unimplemented) diff --git a/libstdc++-v3/testsuite/20_util/is_trivially_default_constructible/value.cc b/libstdc++-v3/testsuite/20_util/is_trivially_default_constructible/value.cc new file mode 100644 index 0000000..4d10275 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/is_trivially_default_constructible/value.cc @@ -0,0 +1,47 @@ +// { dg-options "-std=gnu++11" } +// { dg-do compile } +// +// 2014-03-09 Ville Voutilainen <ville.voutilai...@gmail.com> +// +// 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 copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <type_traits> +#include <testsuite_tr1.h> + +void test01() +{ + using std::is_trivially_default_constructible; + using namespace __gnu_test; + + static_assert(test_category<is_trivially_default_constructible, int>(true), ""); + static_assert(test_category<is_trivially_default_constructible, TType>(true), ""); + static_assert(test_category<is_trivially_default_constructible, PODType>(true), ""); + + static_assert(test_category<is_trivially_default_constructible, NType>(false), ""); + static_assert(test_category<is_trivially_default_constructible, SLType>(true), ""); + static_assert(test_category<is_trivially_default_constructible, SLType>(true), ""); + static_assert(test_category<is_trivially_default_constructible, construct::DelDef>(false), ""); + static_assert(test_category<is_trivially_default_constructible, construct::Abstract>(false), ""); + static_assert(test_category<is_trivially_default_constructible, construct::Ellipsis>(false), ""); + static_assert(test_category<is_trivially_default_constructible, construct::DelEllipsis>(false), ""); + static_assert(test_category<is_trivially_default_constructible, construct::Any>(false), ""); + static_assert(test_category<is_trivially_default_constructible, construct::DelCopy>(false), ""); + static_assert(test_category<is_trivially_default_constructible, construct::DelDtor>(false), ""); + static_assert(test_category<is_trivially_default_constructible, construct::Nontrivial>(false), ""); + +}