220 8810 <CAFdMc-1Kde=8+yCtwD=UNKdDS97H9STGmUFXsFJ5iqWmWQ9Yfw@mail.gmail.com> article
Path: news.gmane.org!not-for-mail
From: "dgutson ." <danielgutson@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: Re: Templetized namespaces
Date: Sat, 25 Jan 2014 22:44:56 -0200
Lines: 481
Approved: news@gmane.org
Message-ID: <CAFdMc-1Kde=8+yCtwD=UNKdDS97H9STGmUFXsFJ5iqWmWQ9Yfw@mail.gmail.com>
References: <CAFdMc-214LLZ3GtZyd3rZ1MwM4Q0qaTZFZmkXuyDPVZDU6aJ=w@mail.gmail.com>
	<4cfc2db6-97da-4750-9296-5aaaa3475014@isocpp.org>
	<CAD6_Qj-2LQUbFWcxFxA0F+zURdmsx8UgyRsJLsTnb2M0J7YTgw@mail.gmail.com>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: plane.gmane.org
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary=e89a8ff1cc026cb46704f0d4e646
X-Trace: ger.gmane.org 1390697091 13459 80.91.229.3 (26 Jan 2014 00:44:51 GMT)
X-Complaints-To: usenet@ger.gmane.org
NNTP-Posting-Date: Sun, 26 Jan 2014 00:44:51 +0000 (UTC)
To: std-proposals@isocpp.org
Original-X-From: std-proposals+bncBDE3NBMV6UFBBCVVSGLQKGQEE6DWWWQ@isocpp.org Sun Jan 26 01:45:00 2014
Return-path: <std-proposals+bncBDE3NBMV6UFBBCVVSGLQKGQEE6DWWWQ@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-bk0-f72.google.com ([209.85.214.72])
	by plane.gmane.org with esmtp (Exim 4.69)
	(envelope-from <std-proposals+bncBDE3NBMV6UFBBCVVSGLQKGQEE6DWWWQ@isocpp.org>)
	id 1W7DqN-0002bw-RY
	for gclcip-std-proposals@m.gmane.org; Sun, 26 Jan 2014 01:44:59 +0100
Original-Received: by mail-bk0-f72.google.com with SMTP id mx11sf8059713bkb.7
        for <gclcip-std-proposals@m.gmane.org>; Sat, 25 Jan 2014 16:44:59 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20130820;
        h=x-gm-message-state:mime-version:in-reply-to:references:date
         :message-id:subject:from: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:content-type;
        bh=N2HnkEzBelli/6R9E9c8eg92kRT2ulRsHPmx6AYA8tI=;
        b=GC610dR5WpfCR29wRjjqAEyU0WHTQGj8XVJw7veiEKmIQCyRN1ZHfGPqgjq+il2gxU
         d8JXtdfRv2TqkhJWeysY0i1OgrukGc8WwKsw7BmZVFWZ3LC8x+MS/Gz2uI+yRe9Gc1vf
         NUZ5iaLxEpHVc+NNoZYDYja6Z634JDjAlgsS0G/ceMqIDFKGnWQWZ2nZSKF5aQ95eTqk
         KmNT2TkZj2WkynbVFum5g9B3FKuSXUvutG+Iq8oknmzhQF+vnCRl3u+4dI8Qjpw6iSE0
         SqEzThk+OkNUwCYk3CUJquKE59tuh1J5UacsuVVfMTiM8ARZeKTLz4m72VaJlXWlVLHJ
         BEzQ==
X-Gm-Message-State: ALoCoQnDppPwifYr6LWTSj7mQnVB4/hNOqSfuCzCq5mvCn5+8RSi18kWX1hnF5o1w/n9Tod6LgJV
X-Received: by 10.204.198.16 with SMTP id em16mr5781440bkb.5.1390697099392;
        Sat, 25 Jan 2014 16:44:59 -0800 (PST)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.180.218.195 with SMTP id pi3ls1006wic.43.canary; Sat, 25 Jan
 2014 16:44:58 -0800 (PST)
X-Received: by 10.204.122.193 with SMTP id m1mr42630bkr.92.1390697098370;
        Sat, 25 Jan 2014 16:44:58 -0800 (PST)
Original-Received: from mail-pb0-x234.google.com (mail-pb0-x234.google.com [2607:f8b0:400e:c01::234])
        by mx.google.com with ESMTPS id og3si8536965bkb.279.2014.01.25.16.44.57
        for <std-proposals@isocpp.org>
        (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
        Sat, 25 Jan 2014 16:44:58 -0800 (PST)
Received-SPF: pass (google.com: domain of danielgutson@gmail.com designates 2607:f8b0:400e:c01::234 as permitted sender) client-ip=2607:f8b0:400e:c01::234;
Original-Received: by mail-pb0-f52.google.com with SMTP id jt11so4615284pbb.11
        for <std-proposals@isocpp.org>; Sat, 25 Jan 2014 16:44:56 -0800 (PST)
X-Received: by 10.68.189.132 with SMTP id gi4mr22401686pbc.57.1390697096457;
 Sat, 25 Jan 2014 16:44:56 -0800 (PST)
Original-Received: by 10.70.78.200 with HTTP; Sat, 25 Jan 2014 16:44:56 -0800 (PST)
In-Reply-To: <CAD6_Qj-2LQUbFWcxFxA0F+zURdmsx8UgyRsJLsTnb2M0J7YTgw@mail.gmail.com>
X-Original-Sender: danielgutson@gmail.com
X-Original-Authentication-Results: mx.google.com;       spf=pass (google.com:
 domain of danielgutson@gmail.com designates 2607:f8b0:400e:c01::234 as
 permitted sender) smtp.mail=danielgutson@gmail.com;       dkim=pass
 header.i=@gmail.com;       dmarc=pass (p=NONE 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-Google-Group-Id: 399137483710
List-Post: <http://groups.google.com/a/isocpp.org/group/std-proposals/post>, <mailto:std-proposals@isocpp.org>
List-Help: <http://support.google.com/a/isocpp.org/bin/topic.py?topic=25838>, <mailto:std-proposals+help@isocpp.org>
List-Archive: <http://groups.google.com/a/isocpp.org/group/std-proposals/>
List-Subscribe: <http://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>,
 <mailto:std-proposals+subscribe@isocpp.org>
List-Unsubscribe: <http://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>,
 <mailto:googlegroups-manage+399137483710+unsubscribe@googlegroups.com>
Xref: news.gmane.org gmane.comp.lang.c++.isocpp.proposals:8810
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/8810>

--e89a8ff1cc026cb46704f0d4e646
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On Tue, Jan 21, 2014 at 7:16 PM, David Rodr=C3=ADguez Ibeas <dibeas@ieee.or=
g>wrote:

> What are the shortcomings of using a class template as a poor-man's
> template?
>

That was my original approach (and is my idea of the plugin I mentioned in
my previous email).
Please read below.


>
> I imagine that the first one is that it must be defined in a single
> header, so if the amount of code used internally is large enough it could
> make it hard to maintain.
>

That's one of the issues, though the workaround is an awful preprocessor
hack of #including pieces within the class definition:

template <.....args...>
struct MyLibrary
{
    #include "part1.h"
....
    #include "part2.h"
};

Of course every reader of this list will feel the profound disgusting taste
of this solution.

And even so, there's the 'using' problem: we cannot write
  using class MyLibrary<int, int, char, 25u>;

which clearly can be done with namespaces.



> The syntax looks like a using-directive, do you also wish for the lookup
> changes associated with it?
>

Sure.


> I imagine this to be the case, right? Can you use the same library in one
> program with different template arguments?
>

It is not my case. When you use "a" library, you use all of it as a single
entity (despite library classes can be customized individually through
templates too).
I don't foresee the need of instantiating the same library with different
arguments.


>
> Can you provide a small code sample with how it would look like?
>

For exemplification, I will show an ongoing library we are developing (I
insist it is heavily under development).
It's called robusto: robusto.googlecode.com
We are using it for undisclosed situations of ionizing radiation. The
library (intentionally written in C++03 but useful for my example here,
only for illustrative purposes) will provide a number of classes that
provide sparse redundancy data. Two arguments rule the tuning of the
library: the "distance" of the data, and the number of copies of each data
(it's sparse since ionizing radiation has "regional" effects); the
algorithms that apply to all the copies will be implemented with template
metaprogramming (it's currently fixed in 3 copies). I'm not going to
discuss here why such tuning configuration will apply for all the data
types, nor any other reason of the library design. I'm bringing it here for
the sake of the discussion.
I'd need  two things: 1) not to repeat all the two tuning configuration
template arguments in all the classes, 2) be able to bring the classes of
the specialized library to the scope that uses them with a using directive.

Exemplifying:

template <uint32_t Distance, uint32_t Copies>
namespace NSRobusto
{
    template <class T>
    class Class1
    {
        ...
    };

    template <class T>
    class Class2
    {
       ...
    };
}

// Then, in all the user-side code:
using namespace NSRobusto<4u, 3u>;

Class1<int> c1int;
Class2<char> c2char;

What happens if another translation unit instantiates the namespace with
other arguments?
I think that c1int and c2char should be name-mangled according to the using
namespace affecting them, so no linking clash should occur.
Please, get the token to continue the discussion :-) I already typed too
much.

   Daniel.


>
>
> On Sun, Jan 19, 2014 at 1:16 PM, Andrew Tomazos <andrewtomazos@gmail.com>=
wrote:
>
>> Namespaces differ from classes in that they can be split within and
>> amongst translation units.  The definition of a namespace is not require=
d
>> to be the same in different translation units.  Multiple namespace
>> definitions of the same namespace in the same translation unit are
>> logically merged into one (the first is called the original, the followi=
ng
>> are called extensions).
>>
>> How do template namespace specialization and template namespace
>> instantiation interact with these new properties that are not present in
>> other template entities?
>>
>> Also namespaces can contain the following declarations, whereas classes
>> cannot:
>>
>> explicit-instantiation
>> explicit-specialization
>> linkage-speci=EF=AC=81cation
>> namespace-de=EF=AC=81nition
>> attribute-declaration
>> asm-de=EF=AC=81nition
>> namespace-alias-de=EF=AC=81nition
>> using-directive
>> opaque-enum-declaration
>>
>> Now that all these are possible member declarations of a template entity=
,
>> how are they handled?
>>
>> Also you need to think about program initialization.  The members of a
>> namespace have a bunch of rules about when they are initialized and in w=
hat
>> order.  How will these rules interact with template namespace instances?
>>
>> The best approach for this type of feature would be to put together an
>> experimental compiler extension to gcc or clang that implements template
>> namespaces.  This would shake out all the above issues (and likely more)
>> which you could then use as the basis of a proposal.
>>
>> On Sunday, January 19, 2014 6:26:57 PM UTC+1, dgutson . wrote:
>>>
>>> Hi.
>>>
>>>    I found a number of situations where the ability to templetize
>>> namespaces would be very useful.
>>>
>>> My latest use case is this: I'm writing a library that is configured
>>> through a number of (non-type) template arguments. Such configuration
>>> affects to all the classes of the library. To be more specific, it's a
>>> fault-tolerant library for the aerospace industry where the whole libra=
ry
>>> is tuned with some integers (some of then related to redundancy due to
>>> ionizing radiation).
>>>
>>> The most natural thing would be to put all the classes in a namespace,
>>> and let the namespace be templetized with such arguments.
>>> Moreover, a using namespace with the appropriate arguments would suffic=
e
>>> for all the application. For example:
>>>
>>>     using namespace TheLibrary<arg1, arg2, arg3>;
>>>
>>> I didn't write the proposal yet, since I'd like to get some feedback.
>>>
>>> Thanks,
>>>
>>>    Daniel.
>>>
>>> ps: The library will be available soon and uses template metaprogrammin=
g
>>> based on the arguments.
>>>
>>>
>>> --
>>> Who=E2=80=99s got the sweetest disposition?
>>> One guess, that=E2=80=99s who?
>>> Who=E2=80=99d never, ever start an argument?
>>> Who never shows a bit of temperament?
>>> Who's never wrong but always right?
>>> Who'd never dream of starting a fight?
>>> Who get stuck with all the bad luck?
>>>
>>  --
>>
>> ---
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> Visit this group at
>> http://groups.google.com/a/isocpp.org/group/std-proposals/.
>>
>
>  --
>
> ---
> 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.
> Visit this group at
> http://groups.google.com/a/isocpp.org/group/std-proposals/.
>



--=20
Who=E2=80=99s got the sweetest disposition?
One guess, that=E2=80=99s who?
Who=E2=80=99d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--=20

---=20
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 e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.

--e89a8ff1cc026cb46704f0d4e646
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><br><div class=3D"gmail=
_quote">On Tue, Jan 21, 2014 at 7:16 PM, David Rodr=C3=ADguez Ibeas <span d=
ir=3D"ltr">&lt;<a href=3D"mailto:dibeas@ieee.org" target=3D"_blank">dibeas@=
ieee.org</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-=
left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;p=
adding-left:1ex"><div dir=3D"ltr">What are the shortcomings of using a clas=
s template as a poor-man&#39;s template?</div>
</blockquote><div><br></div><div>That was my original approach (and is my i=
dea of the plugin I mentioned in my previous email).</div><div>Please read =
below.</div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"mar=
gin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,2=
04);border-left-style:solid;padding-left:1ex">
<div dir=3D"ltr"><div><br></div><div>I imagine that the first one is that i=
t must be defined in a single header, so if the amount of code used interna=
lly is large enough it could make it hard to maintain.</div></div></blockqu=
ote>
<div><br></div><div>That&#39;s one of the issues, though the workaround is =
an awful preprocessor hack of #including pieces within the class definition=
:</div><div><br></div><div>template &lt;.....args...&gt;</div><div>struct M=
yLibrary</div>
<div>{</div><div>=C2=A0 =C2=A0 #include &quot;part1.h&quot;</div><div>...</=
div><div><div>=C2=A0 =C2=A0 #include &quot;part2.h&quot;</div></div><div>};=
</div><div><br></div><div>Of course every reader of this list will feel the=
 profound disgusting taste of this solution.</div>
<div><br></div><div>And even so, there&#39;s the &#39;using&#39; problem: w=
e cannot write</div><div>=C2=A0 using class MyLibrary&lt;int, int, char, 25=
u&gt;;</div><div><br></div><div>which clearly can be done with namespaces.<=
/div>
<div><br></div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"=
margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,20=
4,204);border-left-style:solid;padding-left:1ex"><div dir=3D"ltr"><div>The =
syntax looks like a using-directive, do you also wish for the lookup change=
s associated with it?</div>
</div></blockquote><div><br></div><div>Sure.</div><div>=C2=A0</div><blockqu=
ote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-wid=
th:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-l=
eft:1ex">
<div dir=3D"ltr"><div> I imagine this to be the case, right? Can you use th=
e same library in one program with different template arguments?</div></div=
></blockquote><div><br></div><div>It is not my case. When you use &quot;a&q=
uot; library, you use all of it as a single entity (despite library classes=
 can be customized individually through templates too).</div>
<div>I don&#39;t foresee the need of instantiating the same library with di=
fferent arguments.</div><div>=C2=A0</div><blockquote class=3D"gmail_quote" =
style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:r=
gb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir=3D"ltr">
<div><br></div><div>Can you provide a small code sample with how it would l=
ook like?=C2=A0<br></div></div></blockquote><div><br></div><div>For exempli=
fication, I will show an ongoing library we are developing (I insist it is =
heavily under development).</div>
<div>It&#39;s called robusto: <a href=3D"http://robusto.googlecode.com">rob=
usto.googlecode.com</a></div><div>We are using it for undisclosed situation=
s of ionizing radiation. The library (intentionally written in C++03 but us=
eful for my example here, only for illustrative purposes) will provide a nu=
mber of classes that provide sparse redundancy data. Two arguments rule the=
 tuning of the library: the &quot;distance&quot; of the data, and the numbe=
r of copies of each data (it&#39;s sparse since ionizing radiation has &quo=
t;regional&quot; effects); the algorithms that apply to all the copies will=
 be implemented with template metaprogramming (it&#39;s currently fixed in =
3 copies). I&#39;m not going to discuss here why such tuning configuration =
will apply for all the data types, nor any other reason of the library desi=
gn. I&#39;m bringing it here for the sake of the discussion.</div>
<div>I&#39;d need =C2=A0two things: 1) not to repeat all the two tuning con=
figuration template arguments in all the classes, 2) be able to bring the c=
lasses of the specialized library to the scope that uses them with a using =
directive.</div>
<div><br></div><div>Exemplifying:</div><div><br></div><div>template &lt;uin=
t32_t Distance, uint32_t Copies&gt;</div><div>namespace NSRobusto</div><div=
>{</div><div>=C2=A0 =C2=A0 template &lt;class T&gt;</div><div>=C2=A0 =C2=A0=
 class Class1</div>
<div>=C2=A0 =C2=A0 {</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 ...</div><div>=
=C2=A0 =C2=A0 };</div><div><br></div><div>=C2=A0 =C2=A0 template &lt;class =
T&gt;</div><div>=C2=A0 =C2=A0 class Class2</div><div>=C2=A0 =C2=A0 {</div><=
div>=C2=A0 =C2=A0 =C2=A0 =C2=A0...</div><div>=C2=A0 =C2=A0 };</div><div>}</=
div><div><br></div><div>
// Then, in all the user-side code:</div><div>using namespace NSRobusto&lt;=
4u, 3u&gt;;</div><div><br></div><div>Class1&lt;int&gt; c1int;</div><div>Cla=
ss2&lt;char&gt; c2char;</div><div><br></div><div>What happens if another tr=
anslation unit instantiates the namespace with other arguments?</div>
<div>I think that c1int and c2char should be name-mangled according to the =
using namespace affecting them, so no linking clash should occur.<br></div>=
<div>Please, get the token to continue the discussion :-) I already typed t=
oo much.</div>
<div><br></div><div>=C2=A0 =C2=A0Daniel.</div><div>=C2=A0</div><blockquote =
class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1=
px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:=
1ex"><div dir=3D"ltr">
<div></div></div><div class=3D""><div class=3D"h5"><div class=3D"gmail_extr=
a"><br><br><div class=3D"gmail_quote">On Sun, Jan 19, 2014 at 1:16 PM, Andr=
ew Tomazos <span dir=3D"ltr">&lt;<a href=3D"mailto:andrewtomazos@gmail.com"=
 target=3D"_blank">andrewtomazos@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-=
left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;p=
adding-left:1ex"><div dir=3D"ltr">Namespaces differ from classes in that th=
ey can be split within and amongst translation units. =C2=A0The definition =
of a namespace is not required to be the same in different translation unit=
s. =C2=A0Multiple namespace definitions of the same namespace in the same t=
ranslation unit are logically merged into one (the first is called the orig=
inal, the following are called extensions).<div>

<br></div><div>How do template namespace specialization and template namesp=
ace instantiation interact with these new properties that are not present i=
n other template entities?</div><div><br></div><div>Also namespaces can con=
tain the following declarations, whereas classes cannot:</div>

<div><br></div><div><div>explicit-instantiation<br></div><div>explicit-spec=
ialization</div><div>linkage-speci=EF=AC=81cation</div><div>namespace-de=EF=
=AC=81nition</div><div>attribute-declaration<br></div><div>asm-de=EF=AC=81n=
ition<br></div><div>

namespace-alias-de=EF=AC=81nition</div><div>using-directive<br></div><div>o=
paque-enum-declaration<br></div></div><div><br></div><div>Now that all thes=
e are possible member declarations of a template entity, how are they handl=
ed?</div>

<div><br></div><div>Also you need to think about program initialization. =
=C2=A0The members of a namespace have a bunch of rules about when they are =
initialized and in what order. =C2=A0How will these rules interact with tem=
plate namespace instances?</div>

<div><br></div><div>The best approach for this type of feature would be to =
put together an experimental compiler extension to gcc or clang that implem=
ents template namespaces. =C2=A0This would shake out all the above issues (=
and likely more) which you could then use as the basis of a proposal.</div>

<div><div><div><br></div><div>On Sunday, January 19, 2014 6:26:57 PM UTC+1,=
 dgutson . wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0px 0px =
0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-l=
eft-style:solid;padding-left:1ex">
<div dir=3D"ltr">
Hi.<div><br></div><div>=C2=A0 =C2=A0I found a number of situations where th=
e ability to templetize namespaces would be very useful.</div><div><br></di=
v><div>My latest use case is this: I&#39;m writing a library that is config=
ured through a number of (non-type) template arguments. Such configuration =
affects to all the classes of the library. To be more specific, it&#39;s a =
fault-tolerant library for the aerospace industry where the whole library i=
s tuned with some integers (some of then related to redundancy due to ioniz=
ing radiation).</div>


<div><br></div><div>The most natural thing would be to put all the classes =
in a namespace, and let the namespace be templetized with such arguments.</=
div><div>Moreover, a using namespace with the appropriate arguments would s=
uffice for all the application. For example:</div>


<div><br></div><div>=C2=A0 =C2=A0 using namespace TheLibrary&lt;arg1, arg2,=
 arg3&gt;;</div><div><br></div><div>I didn&#39;t write the proposal yet, si=
nce I&#39;d like to get some feedback.</div><div><br></div><div>Thanks,</di=
v><div>


<br></div><div>=C2=A0 =C2=A0Daniel.</div><div><br></div><div>ps: The librar=
y will be available soon and uses template metaprogramming based on the arg=
uments.</div><div><br clear=3D"all"><div><br></div>-- <br>Who=E2=80=99s got=
 the sweetest disposition?<br>


One guess, that=E2=80=99s who?<br>Who=E2=80=99d never, ever start an argume=
nt?<br>Who never shows a bit of temperament?<br>Who&#39;s never wrong but a=
lways right?<br>Who&#39;d never dream of starting a fight?<br>Who get stuck=
 with all the bad luck?=20
</div></div>
</blockquote></div></div></div></div><div><div>

<p></p>

-- <br>
=C2=A0<br>
--- <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%2Bunsubscribe@isocpp.org" target=3D=
"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/" target=3D"_blank">http://groups.google.com/a/isocpp.org/gro=
up/std-proposals/</a>.<br>
</div></div></blockquote></div><br></div>

<p></p>

-- <br>
=C2=A0<br>
--- <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%2Bunsubscribe@isocpp.org" target=3D=
"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/" target=3D"_blank">http://groups.google.com/a/isocpp.org/gro=
up/std-proposals/</a>.<br>
</div></div></blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>=
Who=E2=80=99s got the sweetest disposition?<br>One guess, that=E2=80=99s wh=
o?<br>Who=E2=80=99d never, ever start an argument?<br>Who never shows a bit=
 of temperament?<br>Who&#39;s never wrong but always right?<br>
Who&#39;d never dream of starting a fight?<br>Who get stuck with all the ba=
d luck?=20
</div></div>

<p></p>

-- <br />
&nbsp;<br />
--- <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 std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />

--e89a8ff1cc026cb46704f0d4e646--

.
