From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 106375 invoked by alias); 28 Jun 2018 11:49:36 -0000 Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org Received: (qmail 106253 invoked by uid 89); 28 Jun 2018 11:49:26 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=H*i:sk:CAEhDDb, HX-Received:sk:7-v6mr8 X-HELO: mail-it0-f45.google.com Received: from mail-it0-f45.google.com (HELO mail-it0-f45.google.com) (209.85.214.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 28 Jun 2018 11:49:24 +0000 Received: by mail-it0-f45.google.com with SMTP id p17-v6so7153621itc.2 for ; Thu, 28 Jun 2018 04:49:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=9YBcrqfmvlWpNBx72ruwDc1tL8JfXc9ksf23B+Qpodw=; b=P7+qjbOJbfrlUDv5nvlyr6HAHkoR33TEhRRcUmf8m18H730aKd+lna6d4uQtDnPbF0 bFgzgDybNB+tVlrG7XzRvmkChmm37RNFvAgKG4egK230HXcfdlyswX+hhzaGDapFAQAX 1P52hSgmhGVj1cy9O7+ORlSpbJ5bqvgX78E0KtqW9SiSlirLn61vUGlzVpBRMUTx04oz ROIjSdjXQ7T6QOypsbnYZCvPmIqz8lRxgxq6mT6y0BtoKg/F9XnlVmXcCsmM1W7xP4m7 wKH1OvNMzN8YtlgY/IPb196aAJIxUetBild1xdX3DzS8YxP6ULed2PAa+ca7Fbt9gaxo TEAg== MIME-Version: 1.0 References: In-Reply-To: From: Jonathan Wakely Date: Thu, 28 Jun 2018 11:50:00 -0000 Message-ID: Subject: Re: Wdeprecated-copy on system type To: Csaba Raduly Cc: "gcc@gcc.gnu.org" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2018-06/txt/msg00284.txt.bz2 On Thu, 28 Jun 2018 at 12:32, Csaba Raduly wrote: > > On Wed, Jun 27, 2018 at 1:28 PM, Jonathan Wakely wrote: > > Your mail is off-topic on this list, it would be appropriate on the > > gcc-help list, or in Bugzilla if you want to report a bug. > > > > > > On Wed, 27 Jun 2018 at 11:27, Csaba Raduly wrote: > (snip) > >> 1. Why is a warning emitted only for the const srange? > > > > Because line 16 doesn't use the sub_range copy constructor, it calls > > this instead: > > > > template< class ForwardRange2 > > > sub_range( > > ForwardRange2& r, > > BOOST_DEDUCED_TYPENAME ::boost::enable_if< > > is_compatible_range > > >::type* =3D 0 > > ) > > : base(impl::adl_begin(r), impl::adl_end(r)) > > { > > } > > > > This might be a Boost bug, albeit a harmless one. IMHO the template > > constructor should be constrained so it isn't used for copying > > non-const lvalues. > > So the fact that there's no warning for the non-const version is in > fact a bug in Boost, right? I think that's for the Boost maintainers to decide. The constructor template still gives the right behaviour, even if it's probably not what was intended (a sub_range& is a compatible range of a sub_range, and so can be "converted" to it by that constructor). It probably makes more sense to constrain that constructor so it's not used for "conversions" from sub_range& to sub_range, and the copy constructor gets used instead. > (It's still like that in latest, not yet released Boost 1.68). > > This sounds like a "greedy template" you spoke about at ACCUcon 2018. Yes, exactly. There are other cases in Boost which cause bigger problems e.g. https://wandbox.org/permlink/9Py2Nu8ni6qnSU7O which crashes because trying to copy-construct a non-const lvalue will keep trying to wrap itself recursively until it overflows the stack. > >> 2. Shouldn't boost be exempt from this warning, given that it's > >> included from a system directory (/usr/include) ? > > > > Yes, it probably should, but see below. > > > >> Shouldn't the "implicitly declared copy constructor" error be located > >> at the class definition (boost header), rather than where it's being > >> called (the call which does pass-by-value) ? > > > > The warning is only issued at the point where the implicit definition > > is needed, to avoid issuing warnings when the object is never copied. > > It's needed at the call site in your code, not in the system header > > (well, it might also be needed in the boost headers, but those > > warnings are probably suppressed). > > Of course the warning should only be emitted when such a > constructor/assignment is used. > > Still, in my naive opinion, such a constructor is declared > (implicitly) in the class (sub_range). > The message at the point of use should be something similar to the > "instantiated from" message when there's an error inside a template. > > Something like: > > /usr/include/boost/range/sub_range.hpp:???: implicitly-declared =E2=80=98= constexpr > boost::sub_range std::__cxx11::basic_string>::sub_range(const > boost::sub_range >&)=E2=80=99 is > deprecated > [-Werror=3Ddeprecated-copy] > > /usr/include/boost/range/sub_range.hpp:259:20: note: because REASONS > > subra.cpp:7:6: note: used when initializing argument 1 of =E2=80=98void= func(srange)=E2=80=99 Yes, please report it to our bugzilla. > > > > But I agree that if the class is defined in a system header you can't > > change the code, so the warning is not very helpful. Please report a > > bug, https://gcc.gnu.org/bugs/