220 30034 <cfbe556f-214a-4245-b257-f746424c63f2@isocpp.org> article
Path: news.gmane.org!.POSTED!not-for-mail
From: TONGARI J <tongari95@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Make Typedef Great Again
Date: Sun, 25 Dec 2016 23:38:47 -0800 (PST)
Lines: 574
Approved: news@gmane.org
Message-ID: <cfbe556f-214a-4245-b257-f746424c63f2@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_1696_1228785115.1482737927673"
X-Trace: blaine.gmane.org 1482737931 5402 195.159.176.226 (26 Dec 2016 07:38:51 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Mon, 26 Dec 2016 07:38:51 +0000 (UTC)
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBCC3NA775MLBBCESQPBQKGQETTVDX3Y@isocpp.org Mon Dec 26 08:38:47 2016
Return-path: <std-proposals+bncBCC3NA775MLBBCESQPBQKGQETTVDX3Y@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-io0-f198.google.com ([209.85.223.198])
	by blaine.gmane.org with esmtp (Exim 4.84_2)
	(envelope-from <std-proposals+bncBCC3NA775MLBBCESQPBQKGQETTVDX3Y@isocpp.org>)
	id 1cLPro-0000O5-OO
	for gclcip-std-proposals@m.gmane.org; Mon, 26 Dec 2016 08:38:45 +0100
Original-Received: by mail-io0-f198.google.com with SMTP id p127sf319154714iop.5
        for <gclcip-std-proposals@m.gmane.org>; Sun, 25 Dec 2016 23:38:49 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=date:from:to:message-id:subject:mime-version:x-original-sender
         :reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group
         :list-post:list-help:list-archive:list-subscribe:list-unsubscribe;
        bh=t4bHYEsi1T9f+RUCH1cBi01B4ZftZFUPY9ALMbyWl5w=;
        b=lmOsdV9zyRPUB8KmWprGU5/KD54HFaEZ8I35FsD5CA1Pwksjjb4wc4DSZBONvLtohC
         7Krv6p//SeR+uLfb1YdCBmCzQdI4cOZw045SdPD68xrYk0FUxUzFOgUul04RN380Ac7v
         fnVeeyWshr9Goz/6SC6ORyxubEoKmAkQx4qajWmQMe7hn1W3Jelo/17r9OyAyg9nciF7
         ZTB2ne0tS5RciHqBHLedYHJQ3F8otqMEsim2u7Hq1M6rih3LRGL3Orb5ZbvjgC7wtUB2
         nwiZuN/JvZor/+kijUuNNpootZ/NxinORr/dSa8w8T4+SajIFnCTlaBWQTwGUfQVg0t1
         Wkmg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=date:from:to:message-id:subject:mime-version:x-original-sender
         :reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group
         :list-post:list-help:list-archive:list-subscribe:list-unsubscribe;
        bh=t4bHYEsi1T9f+RUCH1cBi01B4ZftZFUPY9ALMbyWl5w=;
        b=DJ5B3DSsRl8UUCgPSDyuwD9gsJs55F5UsNAfYniTB8D2Uju8z9ZqmbIxP4X2+Zcrig
         xTzKl3zbbWvIEI3pqoalh7d5JliglCGPY1A8lW2w7YBlKaVSxhd5mYEx7HgnIqkkBUsV
         D5UwePM+gLZYLbxEkO3lByptfmYnCCyR9qNAb7uZlBPyywv8R+l4ahIHIdYC/Z2XwRyK
         H2O1u4KrAVMtkjD4w2hyHqaLJUNLXQSUzVGBksQiB1k9HdskqG9S8lexk33h/PIXPayG
         tqYSBjJURCY/7nsr0UDsAy1eko6HHyDyKdSCkXmgM5t7kcEIhfbM7/+83Vn0yUSS592G
         SFSQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:date:from:to:message-id:subject:mime-version
         :x-original-sender:reply-to:precedence:mailing-list:list-id
         :x-spam-checked-in-group:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=t4bHYEsi1T9f+RUCH1cBi01B4ZftZFUPY9ALMbyWl5w=;
        b=MCU/xaFxE08CsUDlYgkINzIfV3YEdgvupKMx4yvhtRxsxMN9+86MXZQ9inPZSBuv5w
         6Xo7bHIzcV6wsMzV8v6rfXBB2tXlMZ/WdPR3sFq/+wGTPJLiN04o82JEHI/OoclDJyU+
         fBXcx2+BSSH+TWdfZ0hyAuGpf3OqsP7xnXNHzqgLQGb4DfXDgDjzoQ0gNhUp1VN/FuHt
         manl3RMyh4X7DbIpZZ55Uj1z1rzed9HwCYVHFsjzzqrKOiuaev+/0ZmBzrxvcv9wKh4g
         sW8bwVhQyIUNUud+F/kLtEee6sdNNQnBxZS6jOs0ne1DOJfXV9DsSQYKCWdn04+0QZCt
         NPIg==
X-Gm-Message-State: AIkVDXKQ8znelgzmNR5lgRmR7YNDso2vR8JMk3wPH0CX5IMCj8Mw9CM/KjED6hsA649pSA==
X-Received: by 10.107.47.145 with SMTP id v17mr6672645iov.31.1482737929183;
        Sun, 25 Dec 2016 23:38:49 -0800 (PST)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.157.51.123 with SMTP id u56ls5033671otd.44.gmail; Sun, 25 Dec
 2016 23:38:48 -0800 (PST)
X-Received: by 10.157.37.151 with SMTP id q23mr1134293ota.4.1482737928341;
        Sun, 25 Dec 2016 23:38:48 -0800 (PST)
X-Original-Sender: tongari95@gmail.com
Precedence: list
Mailing-list: list std-proposals@isocpp.org; contact std-proposals+owners@isocpp.org
List-ID: <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:30034
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/30034>

------=_Part_1696_1228785115.1482737927673
Content-Type: multipart/alternative; 
	boundary="----=_Part_1697_126514692.1482737927674"

------=_Part_1697_126514692.1482737927674
Content-Type: text/plain; charset=UTF-8

Typedef declaration is superseded by type alias declaration since C++11, 
its legend seems to come to the end. However, we can make typedef much more 
useful than it is, by allowing it to be used in accompany with variable 
declarations (including parameters and return types) and base-clause in a 
class declaration.

The problem

Everyone who loves templates are likely to face a problem - the name of the 
type being specified is too long that we don't want to spell it out twice!
Although we have type alias, but unfortunately in many cases, it cannot be 
used at the first place and we are forced to spell the irritating names at 
least twice if we have to refer to the type more than once.
Here are some examples:

In function return type:
template<blahblah...>
typename MetaFunc<blahblah...>::type f()
{
    using T = typename MetaFunc<blahblah...>::type; // yuck!
    // Use `T` from now on...
}

In base-clause:
template<blahblah...>
class Derived : public typename MetaFunc<blahblah...>::type
{
    using Base = typename MetaFunc<blahblah...>::type; // yuck!
    // Use `Base` from now on...
}

In parameter list:
template<blahblah...>
void f(SomeTemplate<blahblah...> a, SomeTemplate<blahblah...> b/*yuck!*/);

In deduced type:
auto& ref = getSomeRef(...);
using T = std::remove_reference_t<decltype(ref)>; // yuck!
// Use `T` from now on...

Evidence

These discussions on the std-proposals list are also arose from the same 
problem:

   - Named base classes 
   <https://groups.google.com/a/isocpp.org/d/topic/std-proposals/TKyHxlc--B8/discussion>
   - decltype(return) 
   <https://groups.google.com/a/isocpp.org/d/topic/std-proposals/sfeZ_rR2BvQ/discussion>
   

The solution

The problem comes from the inability to declare the type alias at the first 
place, and the solution is gonna to enable it - with the extended typedef.

In function return type:
template<blahblah...>
typedef typename MetaFunc<blahblah...>::type T f() // yay!
{
    // Use `T` from now on...
}

In base-clause:
template<blahblah...>
class Derived : typedef public typename MetaFunc<blahblah...>::type Base // 
yay!
{
    // Use `Base` from now on...
}

Note how the occurrence of *access-specifier* in base-clause differ in 
semantic:
class C : typedef T B // T: private base; B: private typedef
class C : typedef public T B // T: public base; B: private typedef
class C : public typedef T B // T: private base; B: public typedef
class C : public typedef public T B // T: public base; B: public typedef

In parameter list:
template<blahblah...>
void f(typedef SomeTemplate<blahblah...> T a, T b); // yay!

In deduced type:
typedef auto T& ref = getSomeRef(...); // yay!
// Use `T` from now on...

Note how the the type aliases declared differ:
U u;
typedef auto const& T1 t1 = u; // T1 -> U const&
typedef auto T2 const& t2 = u; // T2 -> U

Suppose we have Concept TS and its abbreviated template syntax, we can do 
this:
void f1(typedef auto T a, T b);
void f2(typedef ConceptName T a, T b);


Typedef and tag declaration

If the typedef contains a tag declaration, the extended usage is disabled. 
For example:
typedef struct {...} R f(); // ill-formed
void f(typedef struct {...} A a); // ill-formed
typedef struct {...} S s; // ill-formed


Extended typedef with mutiple indentifiers

If the extended typedef has mutiple indentifiers follw the typedef-name, 
each identifier separated by , declares a variable. For example:
typedef int* P p1 = nullptr, p2 = nullptr, *p3 = nullptr; // p1 & p2 are 
both `int*`, and p3 is `int**`


That's the rough idea I have, I haven't think about the technical aspect of 
this approach.
Feedbacks are welcome!

-- 
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/cfbe556f-214a-4245-b257-f746424c63f2%40isocpp.org.

------=_Part_1697_126514692.1482737927674
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Typedef declaration is superseded by type alias decla=
ration since C++11, its legend seems to come to the end. However, we can ma=
ke <font face=3D"courier new, monospace">typedef</font>=C2=A0much more usef=
ul than it is, by allowing it to be used in accompany with variable declara=
tions (including parameters and return types) and base-clause in a class de=
claration.<br></div><div><br></div><div><font size=3D"6">The problem</font>=
</div><div><br></div><div>Everyone who loves templates are likely to face a=
 problem - the name of the type being specified is too long that we don&#39=
;t want to spell it out twice!</div><div>Although we have type alias, but u=
nfortunately in many cases, it cannot be used at the first place and we are=
 forced to spell the irritating names at least twice if we have to refer to=
 the type more than once.</div><div>Here are some examples:</div><div><br><=
/div><div>In function return type:</div><div class=3D"prettyprint" style=3D=
"background-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); bo=
rder-style: solid; border-width: 1px; word-wrap: break-word;"><code class=
=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"color: #008;"=
 class=3D"styled-by-prettify">template</span><span style=3D"color: #660;" c=
lass=3D"styled-by-prettify">&lt;</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify">blahblah</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">...&gt;</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"><br></span><span style=3D"color: #008;" class=3D"style=
d-by-prettify">typename</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify"> </span><span style=3D"color: #606;" class=3D"styled-by-pretti=
fy">MetaFunc</span><span style=3D"color: #660;" class=3D"styled-by-prettify=
">&lt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify">blah=
blah</span><span style=3D"color: #660;" class=3D"styled-by-prettify">...&gt=
;::</span><span style=3D"color: #000;" class=3D"styled-by-prettify">type f<=
/span><span style=3D"color: #660;" class=3D"styled-by-prettify">()</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify"><br></span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify">{</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 </span><span sty=
le=3D"color: #008;" class=3D"styled-by-prettify">using</span><span style=3D=
"color: #000;" class=3D"styled-by-prettify"> T </span><span style=3D"color:=
 #660;" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;"=
 class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D=
"styled-by-prettify">typename</span><span style=3D"color: #000;" class=3D"s=
tyled-by-prettify"> </span><span style=3D"color: #606;" class=3D"styled-by-=
prettify">MetaFunc</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">&lt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
">blahblah</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=
....&gt;::</span><span style=3D"color: #000;" class=3D"styled-by-prettify">t=
ype</span><span style=3D"color: #660;" class=3D"styled-by-prettify">;</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span st=
yle=3D"color: #800;" class=3D"styled-by-prettify">// yuck!</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 </span><s=
pan style=3D"color: #800;" class=3D"styled-by-prettify">// Use `T` from now=
 on...</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>=
</span><span style=3D"color: #660;" class=3D"styled-by-prettify">}</span></=
div></code></div><div><br></div><div>In base-clause:</div><div class=3D"pre=
ttyprint" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(=
187, 187, 187); border-style: solid; border-width: 1px; word-wrap: break-wo=
rd;"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=
=3D"color: #008;" class=3D"styled-by-prettify">template</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify">blahblah</span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">...&gt;</span><span style=3D"color: =
#000;" class=3D"styled-by-prettify"><br></span><span style=3D"color: #008;"=
 class=3D"styled-by-prettify">class</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> </span><span style=3D"color: #606;" class=3D"styl=
ed-by-prettify">Derived</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-pretti=
fy">:</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </sp=
an><span style=3D"color: #008;" class=3D"styled-by-prettify">public</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span styl=
e=3D"color: #008;" class=3D"styled-by-prettify">typename</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #606;" class=3D"styled-by-prettify">MetaFunc</span><span style=3D"color: =
#660;" class=3D"styled-by-prettify">&lt;</span><span style=3D"color: #000;"=
 class=3D"styled-by-prettify">blahblah</span><span style=3D"color: #660;" c=
lass=3D"styled-by-prettify">...&gt;::</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify">type<br></span><span style=3D"color: #660;" clas=
s=3D"styled-by-prettify">{</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"><br>=C2=A0 =C2=A0 </span><span style=3D"color: #008;" class=
=3D"styled-by-prettify">using</span><span style=3D"color: #000;" class=3D"s=
tyled-by-prettify"> </span><span style=3D"color: #606;" class=3D"styled-by-=
prettify">Base</span><span style=3D"color: #000;" class=3D"styled-by-pretti=
fy"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D</=
span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><spa=
n style=3D"color: #008;" class=3D"styled-by-prettify">typename</span><span =
style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"=
color: #606;" class=3D"styled-by-prettify">MetaFunc</span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">&lt;</span><span style=3D"color: #=
000;" class=3D"styled-by-prettify">blahblah</span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">...&gt;::</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify">type</span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">;</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"> </span><span style=3D"color: #800;" class=3D"styled-by-pr=
ettify">// yuck!</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"><br>=C2=A0 =C2=A0 </span><span style=3D"color: #800;" class=3D"styled=
-by-prettify">// Use `Base` from now on...</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify"><br></span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">}</span></div></code></div><div><br></div><div>In=
 parameter list:</div><div class=3D"prettyprint" style=3D"background-color:=
 rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: solid;=
 border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><di=
v class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-by-=
prettify">template</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">&lt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
">blahblah</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=
....&gt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br=
></span><span style=3D"color: #008;" class=3D"styled-by-prettify">void</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"> f</span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"=
color: #606;" class=3D"styled-by-prettify">SomeTemplate</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify">blahblah</span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">...&gt;</span><span style=3D"color: =
#000;" class=3D"styled-by-prettify"> a</span><span style=3D"color: #660;" c=
lass=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D"s=
tyled-by-prettify"> </span><span style=3D"color: #606;" class=3D"styled-by-=
prettify">SomeTemplate</span><span style=3D"color: #660;" class=3D"styled-b=
y-prettify">&lt;</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify">blahblah</span><span style=3D"color: #660;" class=3D"styled-by-pretti=
fy">...&gt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
> b</span><span style=3D"color: #800;" class=3D"styled-by-prettify">/*yuck!=
*/</span><span style=3D"color: #660;" class=3D"styled-by-prettify">);</span=
></div></code></div><div><br></div><div>In deduced type:</div><div class=3D=
"prettyprint" style=3D"background-color: rgb(250, 250, 250); border-color: =
rgb(187, 187, 187); border-style: solid; border-width: 1px; word-wrap: brea=
k-word;"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span st=
yle=3D"color: #008;" class=3D"styled-by-prettify">auto</span><span style=3D=
"color: #660;" class=3D"styled-by-prettify">&amp;</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #008;"=
 class=3D"styled-by-prettify">ref</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">=3D</span><span style=3D"color: #000;" class=3D"styled-by-pr=
ettify"> getSomeRef</span><span style=3D"color: #660;" class=3D"styled-by-p=
rettify">(...);</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"><br></span><span style=3D"color: #008;" class=3D"styled-by-prettify">u=
sing</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> T </s=
pan><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"> std</span><span sty=
le=3D"color: #660;" class=3D"styled-by-prettify">::</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify">remove_reference_t</span><span sty=
le=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><span style=3D"=
color: #008;" class=3D"styled-by-prettify">decltype</span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #008=
;" class=3D"styled-by-prettify">ref</span><span style=3D"color: #660;" clas=
s=3D"styled-by-prettify">)&gt;;</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> </span><span style=3D"color: #800;" class=3D"styled-b=
y-prettify">// yuck!</span><span style=3D"color: #000;" class=3D"styled-by-=
prettify"><br></span><span style=3D"color: #800;" class=3D"styled-by-pretti=
fy">// Use `T` from now on...</span></div></code></div><div><br></div><div>=
<font size=3D"4">Evidence</font></div><div><font size=3D"4"><br></font></di=
v><div>These discussions on the std-proposals list are also arose from the =
same problem:</div><div><ul><li><a href=3D"https://groups.google.com/a/isoc=
pp.org/d/topic/std-proposals/TKyHxlc--B8/discussion">Named base classes</a>=
<br></li><li><a href=3D"https://groups.google.com/a/isocpp.org/d/topic/std-=
proposals/sfeZ_rR2BvQ/discussion">decltype(return)</a><br></li></ul></div><=
div><br></div><div><font size=3D"6">The solution</font></div><div><br></div=
><div>The problem comes from the inability to declare the type alias at the=
 first place, and the solution is gonna to enable it - with the extended <f=
ont face=3D"courier new, monospace">typedef</font>.</div><div><br></div><di=
v>In function return type:</div><div class=3D"prettyprint" style=3D"backgro=
und-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-sty=
le: solid; border-width: 1px; word-wrap: break-word;"><code class=3D"pretty=
print"><div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"=
styled-by-prettify">template</span><span style=3D"color: #660;" class=3D"st=
yled-by-prettify">&lt;</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify">blahblah</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">...&gt;</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"><br></span><span style=3D"color: #008;" class=3D"styled-by-prettify"=
>typedef</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> <=
/span><span style=3D"color: #008;" class=3D"styled-by-prettify">typename</s=
pan><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span=
 style=3D"color: #606;" class=3D"styled-by-prettify">MetaFunc</span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify">blahblah</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">...&gt;::</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify">type T f</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">()</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #800;"=
 class=3D"styled-by-prettify">// yay!</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"><br></span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">{</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"><br>=C2=A0 =C2=A0 </span><span style=3D"color: #800;" class=3D"=
styled-by-prettify">// Use `T` from now on...</span><span style=3D"color: #=
000;" class=3D"styled-by-prettify"><br></span><span style=3D"color: #660;" =
class=3D"styled-by-prettify">}</span></div></code></div><div><br></div><div=
>In base-clause:</div><div class=3D"prettyprint" style=3D"background-color:=
 rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: solid;=
 border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><di=
v class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-by-=
prettify">template</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">&lt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
">blahblah</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=
....&gt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br=
></span><span style=3D"color: #008;" class=3D"styled-by-prettify">class</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span =
style=3D"color: #606;" class=3D"styled-by-prettify">Derived</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"col=
or: #660;" class=3D"styled-by-prettify">:</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=
=3D"styled-by-prettify">typedef</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"styled-b=
y-prettify">public</span><span style=3D"color: #000;" class=3D"styled-by-pr=
ettify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">t=
ypename</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </=
span><span style=3D"color: #606;" class=3D"styled-by-prettify">MetaFunc</sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify">blahblah</span><span=
 style=3D"color: #660;" class=3D"styled-by-prettify">...&gt;::</span><span =
style=3D"color: #000;" class=3D"styled-by-prettify">type </span><span style=
=3D"color: #606;" class=3D"styled-by-prettify">Base</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #800=
;" class=3D"styled-by-prettify">// yay!</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify"><br></span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">{</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"><br>=C2=A0 =C2=A0 </span><span style=3D"color: #800;" class=
=3D"styled-by-prettify">// Use `Base` from now on...</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"><br></span><span style=3D"color: =
#660;" class=3D"styled-by-prettify">}</span></div></code></div><div><br></d=
iv><div>Note how the occurrence of <i>access-specifier</i>=C2=A0in base-cla=
use differ in semantic:</div><div class=3D"prettyprint" style=3D"background=
-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style:=
 solid; border-width: 1px; word-wrap: break-word;"><code class=3D"prettypri=
nt"><div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"sty=
led-by-prettify">class</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> C </span><span style=3D"color: #660;" class=3D"styled-by-prett=
ify">:</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </s=
pan><span style=3D"color: #008;" class=3D"styled-by-prettify">typedef</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> T B </span><spa=
n style=3D"color: #800;" class=3D"styled-by-prettify">// T: private base; B=
: private typedef</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"><br></span><span style=3D"color: #008;" class=3D"styled-by-prettify"=
>class</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> C <=
/span><span style=3D"color: #660;" class=3D"styled-by-prettify">:</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=
=3D"color: #008;" class=3D"styled-by-prettify">typedef</span><span style=3D=
"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #=
008;" class=3D"styled-by-prettify">public</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> T B </span><span style=3D"color: #800;" cla=
ss=3D"styled-by-prettify">// T: public base; B: private typedef</span><span=
 style=3D"color: #000;" class=3D"styled-by-prettify"><br></span><span style=
=3D"color: #008;" class=3D"styled-by-prettify">class</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> C </span><span style=3D"color: #=
660;" class=3D"styled-by-prettify">:</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"sty=
led-by-prettify">public</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-pretti=
fy">typedef</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
> T B </span><span style=3D"color: #800;" class=3D"styled-by-prettify">// T=
: private base; B: public typedef</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br></span><span style=3D"color: #008;" class=3D"st=
yled-by-prettify">class</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify"> C </span><span style=3D"color: #660;" class=3D"styled-by-pret=
tify">:</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </=
span><span style=3D"color: #008;" class=3D"styled-by-prettify">public</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span st=
yle=3D"color: #008;" class=3D"styled-by-prettify">typedef</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #008;" class=3D"styled-by-prettify">public</span><span style=3D"color: #0=
00;" class=3D"styled-by-prettify"> T B </span><span style=3D"color: #800;" =
class=3D"styled-by-prettify">// T: public base; B: public typedef</span></d=
iv></code></div><div><br></div><div>In parameter list:</div><div class=3D"p=
rettyprint" style=3D"background-color: rgb(250, 250, 250); border-color: rg=
b(187, 187, 187); border-style: solid; border-width: 1px; word-wrap: break-=
word;"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span styl=
e=3D"color: #008;" class=3D"styled-by-prettify">template</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify">blahblah</span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">...&gt;</span><span style=3D"color: =
#000;" class=3D"styled-by-prettify"><br></span><span style=3D"color: #008;"=
 class=3D"styled-by-prettify">void</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> f</span><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">(</span><span style=3D"color: #008;" class=3D"styled-by-pre=
ttify">typedef</span><span style=3D"color: #000;" class=3D"styled-by-pretti=
fy"> </span><span style=3D"color: #606;" class=3D"styled-by-prettify">SomeT=
emplate</span><span style=3D"color: #660;" class=3D"styled-by-prettify">&lt=
;</span><span style=3D"color: #000;" class=3D"styled-by-prettify">blahblah<=
/span><span style=3D"color: #660;" class=3D"styled-by-prettify">...&gt;</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"> T a</span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">,</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> T b</span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">);</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> </span><span style=3D"color: #800;" class=
=3D"styled-by-prettify">// yay!</span></div></code></div><div><br></div><di=
v>In deduced type:</div><div class=3D"prettyprint" style=3D"background-colo=
r: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: soli=
d; border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><=
div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-b=
y-prettify">typedef</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">=
auto</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> T</sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">&amp;</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=
=3D"color: #008;" class=3D"styled-by-prettify">ref</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> getSomeRef</span><span style=3D"color: #660;" clas=
s=3D"styled-by-prettify">(...);</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> </span><span style=3D"color: #800;" class=3D"styled-b=
y-prettify">// yay!</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"><br></span><span style=3D"color: #800;" class=3D"styled-by-prettif=
y">// Use `T` from now on...</span></div></code></div><div><br></div><div>N=
ote how the the type aliases declared differ:</div><div class=3D"prettyprin=
t" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187, 18=
7, 187); border-style: solid; border-width: 1px; word-wrap: break-word;"><c=
ode class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify">U u</span><span style=3D"color: #660=
;" class=3D"styled-by-prettify">;</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br></span><span style=3D"color: #008;" class=3D"st=
yled-by-prettify">typedef</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-pret=
tify">auto</span><span style=3D"color: #000;" class=3D"styled-by-prettify">=
 </span><span style=3D"color: #008;" class=3D"styled-by-prettify">const</sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">&amp;</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify"> T1 t1 </span><span=
 style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> u</span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">;</span><span style=3D"color: #000;"=
 class=3D"styled-by-prettify"> </span><span style=3D"color: #800;" class=3D=
"styled-by-prettify">// T1 -&gt; U const&amp;</span><span style=3D"color: #=
000;" class=3D"styled-by-prettify"><br></span><span style=3D"color: #008;" =
class=3D"styled-by-prettify">typedef</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"sty=
led-by-prettify">auto</span><span style=3D"color: #000;" class=3D"styled-by=
-prettify"> T2 </span><span style=3D"color: #008;" class=3D"styled-by-prett=
ify">const</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=
&amp;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> t2 <=
/span><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"> u</span><span sty=
le=3D"color: #660;" class=3D"styled-by-prettify">;</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #800;=
" class=3D"styled-by-prettify">// T2 -&gt; U</span></div></code></div><div>=
<br></div><div>Suppose we have Concept TS and its abbreviated template synt=
ax, we can do this:</div><div class=3D"prettyprint" style=3D"background-col=
or: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: sol=
id; border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint">=
<div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-=
by-prettify">void</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"> f1</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=
(</span><span style=3D"color: #008;" class=3D"styled-by-prettify">typedef</=
span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><spa=
n style=3D"color: #008;" class=3D"styled-by-prettify">auto</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify"> T a</span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> T b</span><span style=3D"color: #660;" cl=
ass=3D"styled-by-prettify">);</span><span style=3D"color: #000;" class=3D"s=
tyled-by-prettify"><br></span><span style=3D"color: #008;" class=3D"styled-=
by-prettify">void</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"> f2</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=
(</span><span style=3D"color: #008;" class=3D"styled-by-prettify">typedef</=
span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><spa=
n style=3D"color: #606;" class=3D"styled-by-prettify">ConceptName</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"> T a</span><span sty=
le=3D"color: #660;" class=3D"styled-by-prettify">,</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"> T b</span><span style=3D"color: #6=
60;" class=3D"styled-by-prettify">);</span></div></code></div><div><br></di=
v><div><br></div><div><font size=3D"4">Typedef and tag declaration</font></=
div><div><br></div><div>If the <font face=3D"courier new, monospace">typede=
f</font>=C2=A0contains a tag declaration, the extended usage is disabled. F=
or example:</div><div class=3D"prettyprint" style=3D"background-color: rgb(=
250, 250, 250); border-color: rgb(187, 187, 187); border-style: solid; bord=
er-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><div cla=
ss=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-by-prett=
ify">typedef</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">struct<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">{...}</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify"> R f</span><span style=3D=
"color: #660;" class=3D"styled-by-prettify">();</span><span style=3D"color:=
 #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #800;" c=
lass=3D"styled-by-prettify">// ill-formed</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"><br></span><span style=3D"color: #008;" clas=
s=3D"styled-by-prettify">void</span><span style=3D"color: #000;" class=3D"s=
tyled-by-prettify"> f</span><span style=3D"color: #660;" class=3D"styled-by=
-prettify">(</span><span style=3D"color: #008;" class=3D"styled-by-prettify=
">typedef</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> =
</span><span style=3D"color: #008;" class=3D"styled-by-prettify">struct</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">{...}</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> A a</span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">);</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> </span><span style=3D"color: #800;" class=
=3D"styled-by-prettify">// ill-formed</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"><br></span><span style=3D"color: #008;" class=3D=
"styled-by-prettify">typedef</span><span style=3D"color: #000;" class=3D"st=
yled-by-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-p=
rettify">struct</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">{...=
}</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> S s</spa=
n><span style=3D"color: #660;" class=3D"styled-by-prettify">;</span><span s=
tyle=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"c=
olor: #800;" class=3D"styled-by-prettify">// ill-formed</span></div></code>=
</div><div><br></div><div><br></div><div><font size=3D"4">Extended typedef =
with mutiple indentifiers</font></div><div><br></div><div>If the extended t=
ypedef has mutiple indentifiers follw the typedef-name, each identifier sep=
arated by <font face=3D"courier new, monospace" color=3D"#000000" style=3D"=
background-color: rgb(204, 204, 204);">,</font>=C2=A0declares a variable. F=
or example:</div><div><div class=3D"prettyprint" style=3D"background-color:=
 rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: solid;=
 border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><di=
v class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-by-=
prettify">typedef</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">in=
t</span><span style=3D"color: #660;" class=3D"styled-by-prettify">*</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"> P p1 </span><span=
 style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #008;" class=3D"styled-by-prettify">nullptr</span><span style=3D"color: #=
660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify"> p2 </span><span style=3D"color: #660;" class=3D"=
styled-by-prettify">=3D</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-pretti=
fy">nullptr</span><span style=3D"color: #660;" class=3D"styled-by-prettify"=
>,</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span>=
<span style=3D"color: #660;" class=3D"styled-by-prettify">*</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify">p3 </span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #=
000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" cla=
ss=3D"styled-by-prettify">nullptr</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">;</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> </span><span style=3D"color: #800;" class=3D"styled-by-pret=
tify">// p1 &amp; p2 are both `int*`, and p3 is `int**`</span></div></code>=
</div></div><div><br></div><div><br></div><div>That&#39;s the rough idea I =
have, I haven&#39;t think about the technical aspect of this approach.</div=
><div>Feedbacks are welcome!</div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/cfbe556f-214a-4245-b257-f746424c63f2%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/cfbe556f-214a-4245-b257-f746424c63f2=
%40isocpp.org</a>.<br />

------=_Part_1697_126514692.1482737927674--

------=_Part_1696_1228785115.1482737927673--

.
