From 1b22cc531027832cf1eb50b73354f1730edbba54 Mon Sep 17 00:00:00 2001 From: Katsuhiko Nishimra Date: Tue, 1 Aug 2017 20:36:58 +0900 Subject: [PATCH] libstdc++: Support std::is_aggregate on clang++ Currently, libstdc++ tries to detect __is_aggregate built-in macro using __has_builtin, but this fails on clang++ because __has_builtin on clang++ detects only built-in functions, not built-in macros. This patch adds a test using __is_identifier. Tested with clang++ 6.0.0-svn309616-1~exp1 and g++ 7.1.0-11 on Debian unstable. --- libstdc++-v3/include/std/type_traits | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 390b6f40a..ee9c75baf 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -2894,9 +2894,9 @@ template #if __GNUC__ >= 7 # define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1 -#elif defined __has_builtin +#elif defined(__is_identifier) // For non-GNU compilers: -# if __has_builtin(__is_aggregate) +# if ! __is_identifier(__is_aggregate) # define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1 # endif #endif -- 2.13.3