[v3 PATCH] Implement std::is_aggregate.

Jonathan Wakely jwakely@redhat.com
Mon Apr 3 15:32:00 GMT 2017


On 02/04/17 15:08 +0300, Ville Voutilainen wrote:
>    Implement std::is_aggregate.
>    * include/std/type_traits (is_aggregate, is_aggregate_v): New.
>    * testsuite/20_util/is_aggregate/requirements/explicit_instantiation.cc:
>    New.
>    * testsuite/20_util/is_aggregate/requirements/typedefs.cc: Likewise.
>    * testsuite/20_util/is_aggregate/value.cc: Likewise.

>diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
>index 6707caa..a5e7048 100644
>--- a/libstdc++-v3/include/std/type_traits
>+++ b/libstdc++-v3/include/std/type_traits
>@@ -3062,6 +3062,25 @@ template <typename _From, typename _To>
> #endif
> #undef _GLIBCXX_NO_BUILTIN_HAS_UNIQ_OBJ_REP
>
>+#ifdef __has_builtin
>+# if !__has_builtin(__is_aggregate)
>+// Try not to break non-GNU compilers that don't support the built-in:
>+#  define _GLIBCXX_NO_BUILTIN_IS_AGGREGATE 1
>+# endif
>+#endif
>+
>+#ifndef _GLIBCXX_NO_BUILTIN_IS_AGGREGATE
>+#define __cpp_lib_is_aggregate 201703
>+  /// is_aggregate
>+  template<typename _Tp>
>+    struct is_aggregate
>+    : bool_constant<__is_aggregate(remove_cv_t<_Tp>)> { };

Blank line here please.

>+  /// is_aggregate_v
>+  template<typename _Tp>
>+    inline constexpr bool is_aggregate_v = is_aggregate<_Tp>::value;
>+#endif
>+#undef _GLIBCXX_NO_BUILTIN_IS_AGGREGATE
>+
> #endif // C++17

OK for trunk, thanks.




More information about the Libstdc++ mailing list