From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 644043858C5F for ; Thu, 8 Feb 2024 00:13:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 644043858C5F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 644043858C5F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707351242; cv=none; b=sE2NGdntLbBQY7kvSOgNHV1dgoicv/s37EOK26ZGf9SKSiXN0M0nvLqZodUcLrUEXtfig52wg20kX8TtCttnqA77XxBvkEsbM+/cI6uNUzhevWnI7J291ZrcEimnqDEjPnv0FgX0dhgIDFcouC3tS4hceVVgwpyui3tz8GFFY94= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707351242; c=relaxed/simple; bh=PiojT2bZgCLp8heUQVeeSnUliLVIZa1WbV8w12zmtbY=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=Tkdc35ooTjNNGPK7N9zt8p0u39kwCn/AftUNKJYagVcYeZ0qkjOjCD+G0mpy/vjqZfaGh2qdgxxxWdDz0KDDJhhUa8+u7Q9EOC8X1u0XpYhF8/P5rjOLJdosjytZirNE+I7aKuG5UqRyRQp6WCGr0Y1SkfG8ih+TUHPleaXj8S8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1707351238; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=NjkrEEv2GzPmsZ7nj3Dnyr0mCCZBB4ToyAu9NCuBLqg=; b=NKZD6gHuR2GMUhfvokn83F1U0pFqC7qxIBMrXMFg1Jkrldf+HxH5gCIkUZxffvbt4bE5Gr 9TzLcaHbKP00vkBlTLc7LR2J9eBM78+gS3/sZSstp2ar3wbFs9RLYdJhmJ6i08atgJS2SI JgyG1MgJDUsJyj102GNgEjOAkYdbQmo= Received: from mail-yw1-f199.google.com (mail-yw1-f199.google.com [209.85.128.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-614-CKO9YVcfMeGvpCRidxeDGw-1; Wed, 07 Feb 2024 19:13:56 -0500 X-MC-Unique: CKO9YVcfMeGvpCRidxeDGw-1 Received: by mail-yw1-f199.google.com with SMTP id 00721157ae682-60492362802so21588577b3.2 for ; Wed, 07 Feb 2024 16:13:56 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707351236; x=1707956036; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=NjkrEEv2GzPmsZ7nj3Dnyr0mCCZBB4ToyAu9NCuBLqg=; b=cmxTue1GvWTAYPX1H+IZpiEln/Qb8d3GJ5F1QDRdeSyie1dpu8H3BnXAhlsd1cnOhV kXaIOoF035fkjNn0T7nR0NlTjonNGS+puGKbs3QHaabrmqzK3vOjMcnk6FfnpbbffJtC rxfSpZiNLTDppxUxYlPfr7FQikILrDjM3Uxer69WAqQI9o96jyqYfAKUXRkLDcX8KHGz yPTx1wAdfCKfNLUOv5y3Sn4tJFMj8oCli13UWkn+xIhH31JdbkwfVm12Je5ip9c2Sze5 TFwwXVMnvhSRzDY7XPtee5sV8ahzvEmoo66YrGKyOs+xF8NXg6JVQjrcBUWIrV00kvzE vCgw== X-Gm-Message-State: AOJu0YzDPJ5z5Vq7GJM22KtqdZ0YfsLbi5Tmp74Mpx+9UG7MBI0epgwU YcN+heM7UXIwuZIriBnLF6NDqrXajyrrmgQ0gBOQjRfLJL021sN+ufwm+oAEUq/BkPBi5SpuYgv m2uK0rFstW70plTlf7vj4Z+QVcpheiEaVJ9vgJ/CwcavuUfcuSGifYEIVrUuKqlf9zHNwR8lzzZ VV1CliM9KMrVTRqtL5+9OwgqRj3Sk= X-Received: by 2002:a81:b50a:0:b0:5ff:958d:5b2 with SMTP id t10-20020a81b50a000000b005ff958d05b2mr6020693ywh.51.1707351236102; Wed, 07 Feb 2024 16:13:56 -0800 (PST) X-Google-Smtp-Source: AGHT+IELKDDI/boeshf4mWdyf5XsqyXGz3iUpY8O9Bn8USaQsJ/bIp+mfJsQF9IFNRzqlyVp1lKuBFIm8u3zGuGFeuA= X-Received: by 2002:a81:b50a:0:b0:5ff:958d:5b2 with SMTP id t10-20020a81b50a000000b005ff958d05b2mr6020681ywh.51.1707351235831; Wed, 07 Feb 2024 16:13:55 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Jonathan Wakely Date: Thu, 8 Feb 2024 00:13:39 +0000 Message-ID: Subject: Re: Question about _GLIBCXX_HAVE_BUILTIN_IS_SAME To: Ken Matsui Cc: libstdc++@gcc.gnu.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/alternative; boundary="000000000000eb3f450610d3af09" X-Spam-Status: No, score=-6.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,HTML_MESSAGE,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000eb3f450610d3af09 Content-Type: text/plain; charset="UTF-8" On Wed, 7 Feb 2024 at 21:59, Ken Matsui wrote: > Hi, > > I found we are using _GLIBCXX_HAVE_BUILTIN_IS_SAME in type_traits, but I > think we can use _GLIBCXX_USE_BUILTIN_TRAIT(__is_same) instead. I feel > this is a bit more readable and consistent with other traits. With this > Agreed. > change, AFAIK, _GLIBCXX_HAVE_BUILTIN_IS_SAME is not used anywhere, but > can we completely remove it from gcc/libstdc++-v3/include/bits/c++config > or is there any reason to keep it? > No, it can go. The reason we have that macro is historical. Originally, gcc did not define __is_same, only __is_same_as. Clang defined __is_same. So we needed to use a different built-in depending which compiler we were using. Since https://gcc.gnu.org/g:73ae6eb57251 we just use __is_same for both GCC and Clang (and Intel). We can simplify it as you suggest. > > /// is_same > +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_same) > template > struct is_same > -#ifdef _GLIBCXX_HAVE_BUILTIN_IS_SAME > : public __bool_constant<__is_same(_Tp, _Up)> > + { }; > #else > + template > + struct is_same > : public false_type > -#endif > { }; > > -#ifndef _GLIBCXX_HAVE_BUILTIN_IS_SAME > template > struct is_same<_Tp, _Tp> > : public true_type > { }; > #endif > > I am also wondering if we could replace other _GLIBCXX_HAVE_BUILTIN_* > macros with _GLIBCXX_USE_BUILTIN_TRAIT(*): > > * _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP > * _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE > * _GLIBCXX_HAVE_BUILTIN_LAUNDER > Yes, let's normalize all of these to use the new form. At some point we should also simplify this: #ifdef __has_builtin # ifdef __is_identifier // Intel and older Clang require !__is_identifier for some built-ins: # define _GLIBCXX_HAS_BUILTIN(B) __has_builtin(B) || ! __is_identifier(B) # else # define _GLIBCXX_HAS_BUILTIN(B) __has_builtin(B) # endif #endif I think we can stop supporting old versions of Clang where __is_builtin(__is_same) is false, but we should verify which version of Clang stopped requiring !__is_identifier for those built-ins. If it's older than Clang 14 we can remove _GLIBCXX_HAS_BUILTIN and just use __has_builtin directly in _GLIBCXX_USE_BUILTIN_TRAIT. That should wait for GCC 15 though. --000000000000eb3f450610d3af09--