On Mon, Jul 31, 2017 at 03:53:42PM +0100, Jonathan Wakely wrote: > This __has_bultin check only exists for Clang, so should be replaced > by the correct __is_identifier check, not left there in addition to > it.
I see. Actually I've guessed so, and thank you for clarifying it. I'm attaching a replacing patch. Please take a look at it.
From 1b22cc531027832cf1eb50b73354f1730edbba54 Mon Sep 17 00:00:00 2001 From: Katsuhiko Nishimra <ktns...@gmail.com> 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 <typename _From, typename _To> #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
signature.asc
Description: PGP signature