220 37304 <CANiq72kL7HQf2oS5THm8bxzurhzoc7uhNQq3S9+zvBce2yMZZQ@mail.gmail.com> article
Path: news.gmane.org!.POSTED!not-for-mail
From: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: Pointer overload for ||
Date: Sun, 11 Mar 2018 19:06:37 +0100
Lines: 87
Approved: news@gmane.org
Message-ID: <CANiq72kL7HQf2oS5THm8bxzurhzoc7uhNQq3S9+zvBce2yMZZQ@mail.gmail.com>
References: <1fea07df-46a6-4df2-865a-849be8f8d129@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
X-Trace: blaine.gmane.org 1520791497 17550 195.159.176.226 (11 Mar 2018 18:04:57 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Sun, 11 Mar 2018 18:04:57 +0000 (UTC)
To: std-proposals@isocpp.org
Original-X-From: std-proposals+bncBDRZHGH43YJRBQXASXKQKGQEWLGTK7Y@isocpp.org Sun Mar 11 19:04:52 2018
Return-path: <std-proposals+bncBDRZHGH43YJRBQXASXKQKGQEWLGTK7Y@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-qt0-f197.google.com ([209.85.216.197])
	by blaine.gmane.org with esmtp (Exim 4.84_2)
	(envelope-from <std-proposals+bncBDRZHGH43YJRBQXASXKQKGQEWLGTK7Y@isocpp.org>)
	id 1ev5L2-0004TR-AR
	for gclcip-std-proposals@m.gmane.org; Sun, 11 Mar 2018 19:04:52 +0100
Original-Received: by mail-qt0-f197.google.com with SMTP id p11sf11054385qtg.19
        for <gclcip-std-proposals@m.gmane.org>; Sun, 11 Mar 2018 11:06:59 -0700 (PDT)
ARC-Seal: i=2; a=rsa-sha256; t=1520791619; cv=pass;
        d=google.com; s=arc-20160816;
        b=dLSIe2VBtcLki8yEjIpKEkA878sQdr7DnbbOYVr1UjX9lk31LYeGGk5L5oJZhcHefx
         +4BF5vq4/cbtRhMwp0h12CO7Y/GkhnDRJjMQSvL7aQXeLTSFHaKx8oTJztKD34yMXgPb
         DQs/5Sbvj937SKFZlSjBPS46Ubt37WGxNfJrtIAOq1yTSYWL4qRPEE2b/vJsCUnt9kxa
         qjNcm5RuVQTylqhdANo8Uw/U6pmBJ8FRGSRZz7+DA5mhTIGWSUcGHGEtSL041b780VOH
         jCJh4j76ySD0fNTKt/mCdmWd0ElyIlXHRQqMdC0GULBDj9SrOhOG4tL1AfgYD4K7w7NP
         2sJA==
ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
        h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post
         :list-id:mailing-list:precedence:reply-to:to:subject:message-id:date
         :from:references:in-reply-to:mime-version:arc-authentication-results
         :arc-message-signature:dkim-signature:arc-authentication-results;
        bh=q1+/e8BrVpRLvKpjCIGtb7fJXSi0lXg4gFCsk/PGsDA=;
        b=OvIBbTp0SXspLesioHnVY+uv9B1g1QWdyGAOU7cQbPiHm31eYmUqAfi24H8RdMQkqI
         Wsuevvo9TQDdLYP+RTy/5YK88SqvKEnwM08jF1t7IbNUhJME+gxUxRx6tpsbOz2UeIia
         PGXhK2BU4eZ38DE+D9+2Efs8c9Jv0zWH9PAiBrb/VNYIi5MKtfScCDM124UnM//gqWdt
         d1vyseo4ypN1MYN2+xekE+m5vDVcnsQCQt09R/rBrm+ttq5MQGrUW09BzZKyLI5iVcuw
         5TVJHFICUifpRsx+14GWNaysTw2ka4Z7TXuWB8rOboUhO0TRe7WEoVyg2Mhce6KlJJxD
         gUGw==
ARC-Authentication-Results: i=2; mx.google.com;
       dkim=pass header.i=@gmail.com header.s=20161025 header.b=nEqhXgrA;
       spf=pass (google.com: domain of miguel.ojeda.sandonis@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=miguel.ojeda.sandonis@gmail.com;
       dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=mime-version:in-reply-to:references:from:date:message-id:subject:to
         :x-original-sender:x-original-authentication-results:reply-to
         :precedence:mailing-list:list-id:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=q1+/e8BrVpRLvKpjCIGtb7fJXSi0lXg4gFCsk/PGsDA=;
        b=YMmj0+bJYSOxzQEm5KC6ZVihMkarXGE8xZg2Wwl1UZDFMcyJMIGy6VEhGILJHx3zfK
         +MSSIizTe+Nc8EaSl27PeYUg5xo3UhLzZczmcIomvRsNhZQhtj2lasYF/IzPmKGLV3FT
         clYUBOVQf9g0N4ULPTAOnW8EHn3ok0Pu1JxvcfVIzW6GQYhtSb7b7XfE018CMOkhEt4e
         0t/CHMMii/XHyHr9I7wpqWoxo4FFGFVptMNrttMiG6xikFbSPZodOH8QHgp6Rl2qELr3
         fIfTg8Kll/BDLp+ABSJafDDOjFibZVK4SoNlbtlzzOH6hlE04dz+YQ/vhzMvc0E3NV0S
         UoCQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:in-reply-to:references:from:date
         :message-id:subject:to:x-original-sender
         :x-original-authentication-results:reply-to:precedence:mailing-list
         :list-id:x-spam-checked-in-group:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=q1+/e8BrVpRLvKpjCIGtb7fJXSi0lXg4gFCsk/PGsDA=;
        b=jIBVMKs5LmQQ/CaxC5TqlWYWB/4hrRqormNbVGTn71LTJtL/faDY0oCFz4WRDKmB8j
         34mRPuy3W56DPgIp8+0lQSVgYv9bzbpNIEMnaoUWMrWY+VPQNp8DXqlarJbdqz1QlteL
         JLeEPLzJYDsRgr2pZJJGpffiMBUjyUfTfvx08Cpy/+OQYppdfe8QTQZZrNuc0ZAjTcdL
         sLs5/fKaUbyteYyCLKqUMPRMXNc8aGfGteYXN/WZ1qwJ9kxoyi23pTa2VNvVM12PLEdU
         PpvtKJw8BeyUp0Z1a5VQCM1AD4UnUiSuXij9REwBVjwN8bgpnXNA+eVYMd2fusxqUkxG
         zGoQ==
X-Gm-Message-State: AElRT7FJK5nkcQ74m07V7HvhhThSSEcWtDLTPJwmdVI7ClMchtcnuuxz
	N8oJywUm0rXaGDkLfpmvhfxjcw==
X-Google-Smtp-Source: AG47ELsnbXhSt8T9vpib2k82stAK/BbHhDuZr5B7xvsoV1gEAI6+VWf905fGL2B3r7MhvzOOX3n+dA==
X-Received: by 10.200.6.68 with SMTP id e4mr4183946qth.51.1520791619211;
        Sun, 11 Mar 2018 11:06:59 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.200.11.2 with SMTP id e2ls1470274qti.12.gmail; Sun, 11 Mar
 2018 11:06:58 -0700 (PDT)
X-Received: by 10.237.34.205 with SMTP id q13mr7935397qtc.113.1520791618144;
        Sun, 11 Mar 2018 11:06:58 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1520791618; cv=none;
        d=google.com; s=arc-20160816;
        b=ttrcTUyZRrEG4Z0qClSDRN7U4bD4RHro0gDxOufhK2GbDUzVHyzoVStkXJoCIiLncB
         PMdQz+pZ+O4wPk2qr/T3XJ1q/aGV5lQK7o0IXIhBujhTx5Q32BFenNfUuDQErkzXkm9n
         RGJwUYtl4Lp9/Dp55XpdveF2k1oF9GycfZCSNvO8367WZ3BUiF/9yu/UgYzfBxe8mrmc
         75y7HNf8LxxtZLv1iiIPvOhthmULnGzUTiYdsxXBKQoNV1+1nM+PQhMFk5L7QGqqjO3u
         A50/khlmFcNJ2EjmNSQMz68wpG3TZq01rygZ/bvWca234OGJnkUhW0XXVUWvuRVPO0RB
         iV1g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
        h=to:subject:message-id:date:from:references:in-reply-to:mime-version
         :dkim-signature:arc-authentication-results;
        bh=f0H5k/XEzGy6pDDPcO3tB0DcBhNA00WXQ0yIKqNZGws=;
        b=Xwzvc61WNEdxJ0LcYm5J1dQfcRCis3qq3nzLGToX94p4JUEPzfbhtKkHTf/wjNhMpd
         i5CKfpWsct1IFPkRSw7NO39j1halbhpWAU+QDN4JX1SgmFdj5qw2HL1XGu6CVl6dzhP9
         4NIhYr7qKaQEILROvBQ2sfH49OiB8hIj4O3LvmdzMXK6bb17yFDaiiEM+O+YEwA2Q0HJ
         CC7idcv28Bmj6SIPTPTul3X0dpce9K6S6gTjiE6iAnG51rpVRT4Q7YcIq3uQsaizdOG7
         9VOyj72g7g7zMNCZ9Uwl+W3CMk3noE+E5dQAouW/NER+YzqB8LFwUlyoNBpmPG1Q2WFl
         Xf3Q==
ARC-Authentication-Results: i=1; mx.google.com;
       dkim=pass header.i=@gmail.com header.s=20161025 header.b=nEqhXgrA;
       spf=pass (google.com: domain of miguel.ojeda.sandonis@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=miguel.ojeda.sandonis@gmail.com;
       dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com
Original-Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65])
        by mx.google.com with SMTPS id m3sor3631325qtg.94.2018.03.11.11.06.58
        for <std-proposals@isocpp.org>
        (Google Transport Security);
        Sun, 11 Mar 2018 11:06:58 -0700 (PDT)
Received-SPF: pass (google.com: domain of miguel.ojeda.sandonis@gmail.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65;
X-Received: by 10.237.55.33 with SMTP id i30mr8615474qtb.202.1520791617582;
 Sun, 11 Mar 2018 11:06:57 -0700 (PDT)
Original-Received: by 10.200.52.247 with HTTP; Sun, 11 Mar 2018 11:06:37 -0700 (PDT)
In-Reply-To: <1fea07df-46a6-4df2-865a-849be8f8d129@isocpp.org>
X-Original-Sender: miguel.ojeda.sandonis@gmail.com
X-Original-Authentication-Results: mx.google.com;       dkim=pass
 header.i=@gmail.com header.s=20161025 header.b=nEqhXgrA;       spf=pass
 (google.com: domain of miguel.ojeda.sandonis@gmail.com designates
 209.85.220.65 as permitted sender) smtp.mailfrom=miguel.ojeda.sandonis@gmail.com;
       dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com
Precedence: list
Mailing-list: list std-proposals@isocpp.org; contact std-proposals+owners@isocpp.org
List-ID: <std-proposals.isocpp.org>
X-Spam-Checked-In-Group: std-proposals@isocpp.org
X-Google-Group-Id: 399137483710
List-Post: <https://groups.google.com/a/isocpp.org/group/std-proposals/post>, <mailto:std-proposals@isocpp.org>
List-Help: <https://support.google.com/a/isocpp.org/bin/topic.py?topic=25838>, <mailto:std-proposals+help@isocpp.org>
List-Archive: <https://groups.google.com/a/isocpp.org/group/std-proposals/>
List-Subscribe: <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>,
 <mailto:std-proposals+subscribe@isocpp.org>
List-Unsubscribe: <mailto:googlegroups-manage+399137483710+unsubscribe@googlegroups.com>,
 <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>
Xref: news.gmane.org gmane.comp.lang.c++.isocpp.proposals:37304
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/37304>

On Sun, Mar 11, 2018 at 9:38 AM,  <jeffersoncarpenter2@gmail.com> wrote:
> Not sure how this will be received -- I haven't posted here much.  Just
> thought it would be worth mentioning this idea.
>
> Suppose you have an API that you want to optionally allocate storage for
> your user.  They can either pass in a pointer to some existing allocated
> space, or pass in a null pointer and space is allocated for them.
>
> void foo(int *x) {
>   if (x == nullptr) {
>     x = new int;
>   }
>   // etc.
> }
>
> Just figured it would be a decent idea if the || operator received a pointer
> overload.  Then you could write the more succinct
>
> void foo(int *x) {
>   x = x || new int;
> }
>
> or even (ducks for cover)
>
> void foo(int *x) {
>   x ||= new int;
> }

Your first version is the best one, to be honest :-) In any case, if
you really need something like you propose (a pseudo-DSL, generated
code, ...?), then a macro with a descriptive name would be the
simplest and most readable, e.g. for your second version:

    #define OR_ELSE(v, e) ((v) ? (v) : (e))

    // ...
    x = OR_ELSE(x, new int);

For your third version:

    #define ENSURE_INIT(v, e) do { if (not (v)) (v) = (e); } while(false)

    // ...
    ENSURE_INIT(x, new int);

If you are really keen on having the operator, you could always
approximate like:

    #define LAZY(x) [](){ return (x); }

    template <typename T, typename E>
    T operator||(T p, E e)
    {
       if (p)
           return p;
       return e();
    }

    // ...
    x = x || LAZY(new int);

Similar for |=; and add something to restrict the overloads as needed.

Now, if you want to make a cool proposal:

    template <typename T, expression E>
    T operator||(T p, E e)
    {
       if (p)
           return p;
       return e;
    }

    // ...
    x = x || new int;

;-)

Cheers,
Miguel

-- 
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CANiq72kL7HQf2oS5THm8bxzurhzoc7uhNQq3S9%2BzvBce2yMZZQ%40mail.gmail.com.

.
