220 32360 <9a9e46d5-ed24-40d8-8451-8b32ec0146d5@isocpp.org> article
Path: news.gmane.org!.POSTED!not-for-mail
From: Jakob Riedle <jakob.riedle@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: =?UTF-8?B?UmU6IFtzdGQtcHJvcG9zYWxzXSBSZTogQWRkaW5nIHRoZSBLZXl3b3JkIOKAnGludGVyZg==?=
	=?UTF-8?B?YWNl4oCdIGluIEMrKw==?=
Date: Tue, 9 May 2017 09:19:48 -0700 (PDT)
Lines: 316
Approved: news@gmane.org
Message-ID: <9a9e46d5-ed24-40d8-8451-8b32ec0146d5@isocpp.org>
References: <c8742174-fef0-44a9-988d-2c8aebba9243@isocpp.org>
 <CACL3gUXPSVdsT0Z77igxGVtHU9ALGPcN=7hwKKKfBmt8eQmXtA@mail.gmail.com>
 <9ee212eb-4037-40c4-94c3-57a9a170a4c3@isocpp.org> <1765502.4y06pMOS3s@tjmaciei-mobl1>
 <e8fb03f4-8c94-46c2-a612-acab81117998@isocpp.org>
 <CAOHCbiswurpbE6tG3igWTsFfpJ=LAeT9PoTUZBNsrnMOhEwSxQ@mail.gmail.com>
 <45a81e95-d352-49ab-9c6e-7375aa41413c@isocpp.org>
 <d832c461-fa3e-429e-a36b-1d0b11eb634f@isocpp.org>
 <da34864f-4752-4969-bac5-96c6ce133bd1@isocpp.org>
 <09ec869a-2c1d-4fe8-8295-253e5001edd4@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_1274_354219459.1494346788659"
X-Trace: blaine.gmane.org 1494346794 813 195.159.176.226 (9 May 2017 16:19:54 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Tue, 9 May 2017 16:19:54 +0000 (UTC)
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBCX2XNFO6MPRBJOYY7EAKGQERL7ZBFY@isocpp.org Tue May 09 18:19:45 2017
Return-path: <std-proposals+bncBCX2XNFO6MPRBJOYY7EAKGQERL7ZBFY@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-pg0-f71.google.com ([74.125.83.71])
	by blaine.gmane.org with esmtp (Exim 4.84_2)
	(envelope-from <std-proposals+bncBCX2XNFO6MPRBJOYY7EAKGQERL7ZBFY@isocpp.org>)
	id 1d87rV-0008Q3-7G
	for gclcip-std-proposals@m.gmane.org; Tue, 09 May 2017 18:19:45 +0200
Original-Received: by mail-pg0-f71.google.com with SMTP id d127sf3323475pga.11
        for <gclcip-std-proposals@m.gmane.org>; Tue, 09 May 2017 09:19:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=date:from:to:message-id:in-reply-to:references: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=6FDwwnztcW967fK5E953xxKUdn7N5YwtWm3s49gKNZ0=;
        b=jaD1YdFUP0/hJUq/gMdCviBrjcTuknYPl1iL4Lz5zH5GDbGIQghhiudUtBxLQly4cN
         SQ/BqYoAOf9w2Et1Rw31eafh/KxvDoGiESryeF9T386bq52mLFrYCuhhsTPcBD1HUW49
         qlN80BYDVmDDvvIsLif6CPmMrzX8NlAoAvJ7q8SmCm++RzV1sN4pmRCuvSPvC2HTX3vt
         7qsuA9RTzr4Moho6q+BqCEtvLFol/doCZUf0FAX556dG9cy6Mh89yh4nzRJKrtF2/+vS
         LXDNanGsAVik5Gd3CHHuOAP0gCYY9+dmNKawOuI4gqJUxdgRyQRJPwvfIsZ3vssUTswL
         gDww==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=date:from:to:message-id:in-reply-to:references: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=6FDwwnztcW967fK5E953xxKUdn7N5YwtWm3s49gKNZ0=;
        b=O1QnJPklnqMSxa21seaC54gz82PZOqUdf9ZsjVmG2kGSmbywF0urd+J/hBow9HHY4W
         ToRzadzwxberdS5BsgxwvqBtqO8tNNDYH6DWiJC2Q16JREsjUcoS+JoTzvSTjHek54GN
         XZCPLBv0BSDeO8rCXMIozcTOyA/bqu0E/Ao0X0FBE3P+D2U/IJS2+K7VrUZfiF4lCWLE
         RJdGfkqQK0QX9/q3bH1lpjBNmI/L+Rfub6wIG2LK2fF8uA2FdhE7HjliyPGHndW7YHri
         sMcTxq+Oa6BWTz9/nzUBBtSr1nmWX+T/om0NnoUI1dBo71omc2lmx8emmGt3Ejlo4rQq
         mSSQ==
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:in-reply-to:references
         :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=6FDwwnztcW967fK5E953xxKUdn7N5YwtWm3s49gKNZ0=;
        b=hgYhQrYNz06L5tyOe38ucvLBWpYb0bF7JF2DICrnJuRZDpZOXXS+D65vvTFPbMaYpe
         4vTiMxj2M76xIJ3c8mctY1g8plT9WoMVENTq5f3s+IG5t2Gb2Io1lzsmzRzj/P12YdHf
         qS34NLX5/tWZ6DG1q5X0A979pskPHVhSYDdb+JYC/KsfooQP5ejokQ0ktKj/N0TdKq0p
         aCF56dgqqYI8PC9PrLwlIJ9Khd6xLv4/MOxXP0Bm7e1K5xK+CaqRMoPLevywiddMfQtF
         C9U+UA+2zppHNVQJfJS/H+NfsOYPA4HKIHYLnRsjYoRD2Zktao+F4PNIWs5HvUC2Y9TS
         4McQ==
X-Gm-Message-State: AODbwcDw9QEUYaQyhnYhoj8arA9AHpEScVvt7sIqFKQCzI9Ar8Zn+EYn
	rVVHbut+kUWRXg==
X-Received: by 10.99.42.199 with SMTP id q190mr154573pgq.102.1494346790271;
        Tue, 09 May 2017 09:19:50 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.157.73.129 with SMTP id g1ls610623otf.32.gmail; Tue, 09 May
 2017 09:19:49 -0700 (PDT)
X-Received: by 10.157.60.148 with SMTP id z20mr16155otc.3.1494346789146;
        Tue, 09 May 2017 09:19:49 -0700 (PDT)
In-Reply-To: <09ec869a-2c1d-4fe8-8295-253e5001edd4@isocpp.org>
X-Original-Sender: jakob.riedle@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:32360
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/32360>

------=_Part_1274_354219459.1494346788659
Content-Type: multipart/alternative; 
	boundary="----=_Part_1275_311731125.1494346788659"

------=_Part_1275_311731125.1494346788659
Content-Type: text/plain; charset="UTF-8"

Am Dienstag, 9. Mai 2017 16:39:08 UTC+2 schrieb Nicol Bolas:
>
> That would have to be a `vector<BaseClass*>`. Which would be different 
> from `vector<BaseClass>`.
>

Yeah, I was aiming for std::vector<BaseClass&>, sorry for the ambiguity.

*[Note: Having a reference here introduces some new difficulties with 
lifetime,*
*but I think my point is independent of that: Generic Functions/*
*Translation Units are usually independent of the concrete Type]*
 

> No, my argument is that `Callable<void()>` is a *concept*. Concepts *are 
> not types*; in the current TS, they are either functions or variables, 
> neither of which is a *type*.
> [...]
> That's my point. You can't have `Callable<>` be both a static and dynamic 
> concept. That's why its best to make "dynamic concepts" specifically be 
> types.
>

You are right on that. However, I defined the use of Callable<> in 
different contexts quite clearly (did I not?):

void func(){
>  // ...
> }
> int main(){
> // Here the concept 'Callable<>' is used at a non-deduced context (where 
> no deduction happens)
> // Therefore, the Callable<> will automatically be interpreted as an *abstract 
> class* (Dynamic Concept) to which other types can be type erased to.
> std::vector<Callable> myVec;
> myVec.emplace( &func );
> }
> class MyClass{
>  std::vector<Callable> myVec; // same applies here since we are in an 
> undeduced context
>  void set_vector( std::vector<Callable> newVec ){ // This is still a 
> function template where Callable might be deduced as std::function<void()>
>   std::move(newVec.begin(),newVec.end(),std::back_inserter(myVec)); // 
> Here an implicit conversion happens from the potentially specialized 
> std::function<void()> to type erased Callables

 }
> }


[...]

`Callable<>` is a static concept, so if you want to make a dynamic concept 
> based on it, you must use some other syntax besides `Callable<>`.
>

Is this question now solved?
I should explicate here, that I personally strive for exactly this 
ambiguity to allow going hand in hand with "normal" concepts.
Actually, I see your point of ambiguity very clearly.
But maybe you have this perspective, because the different applications of 
a concepts name are not going hand in hand (yet). Is that true?

In the following I will argue, why we should strive to reconcile Dynamic 
and "Static" Concepts to go hand in hand with each other,
much like compile time and runtime constexpr function execution does.


*Plea to complete the symmetry to constexpr functions:*

Constexpr functions operate on Values. Values have to have a data type, 
that means in an abstract way,
*data types are concepts (subsets of) the infinite set of potential values*.

Concepts (from Concepts Lite) also represent subsets, but not upon values 
but upon the infinite set of potential types.

*Trying to interwine both principles:*

   - If you pass constant (known at compilation) values into a constexpr 
   function, you immediately can work with it and determine everything you 
   want at compile time.
   - If you pass constant (known at compilation) types into a templated 
   function/class, you immediately can work with it and determine everything 
   you want at compile time.
   - If you pass a dynamic (only known at runtime) values into a constexpr 
   function, you need to defer all work to the run time.
   - If you pass a dynamic (only known at compilation due to polymorphism) 
   types into a templated function/class, you need to defer all work to 
   runtime.

Data types (as mentioned above), guarantee certain subset of possible 
values a variable of that type can have.
Concepts guaratee a certain subsets of types.
In order to be able to defer an operations on concrete types (restricted by 
a concept) to run time, 
dynamic concepts have to make the symmetry complete.


Yours cincerely,
Jakob

-- 
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/9a9e46d5-ed24-40d8-8451-8b32ec0146d5%40isocpp.org.

------=_Part_1275_311731125.1494346788659
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Am Dienstag, 9. Mai 2017 16:39:08 UTC+2 schrieb Nicol Bola=
s:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;b=
order-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div>That w=
ould have to be a `vector&lt;BaseClass*&gt;`. Which would be different from=
 `vector&lt;BaseClass&gt;`.<br></div></div></blockquote><div><br></div><div=
>Yeah, I was aiming for std::vector&lt;BaseClass&amp;&gt;, sorry for the am=
biguity.</div><div><br></div><div><i>[Note: Having a reference here introdu=
ces some new difficulties with lifetime,</i></div><div><i>but I think my po=
int is independent of that: Generic Functions/</i></div><div><i>Translation=
 Units are usually independent of the concrete Type]</i></div><div>=C2=A0</=
div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex=
;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div dir=
=3D"ltr"><div>No, my argument is that `Callable&lt;void()&gt;` is a <i>conc=
ept</i>. Concepts <i>are not types</i>; in the current TS, they are either =
functions or variables, neither of which is a <i>type</i>.<br></div></div><=
div>[...]</div><div>That&#39;s my point. You can&#39;t have `Callable&lt;&g=
t;` be both a static and dynamic concept. That&#39;s why its best to make &=
quot;dynamic concepts&quot; specifically be types.</div></div></blockquote>=
<div><br></div><div>You are right on that. However, I defined the use of Ca=
llable&lt;&gt; in different contexts quite clearly (did I not?):</div><div>=
<br></div><blockquote class=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.=
8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><span s=
tyle=3D"font-family: monospace; background-color: rgb(250, 250, 250); color=
: rgb(0, 0, 136);">void</span><span style=3D"font-family: monospace; backgr=
ound-color: rgb(250, 250, 250); color: rgb(0, 0, 0);">=C2=A0func</span><spa=
n style=3D"font-family: monospace; background-color: rgb(250, 250, 250); co=
lor: rgb(102, 102, 0);">(){<br></span><span style=3D"font-family: monospace=
; background-color: rgb(250, 250, 250); color: rgb(0, 0, 0);">=C2=A0</span>=
<span style=3D"font-family: monospace; background-color: rgb(250, 250, 250)=
; color: rgb(136, 0, 0);">// ...<br></span><span style=3D"font-family: mono=
space; background-color: rgb(250, 250, 250); color: rgb(102, 102, 0);">}</s=
pan><span style=3D"font-family: monospace; background-color: rgb(250, 250, =
250); color: rgb(0, 0, 0);"><br></span><span style=3D"font-family: monospac=
e; background-color: rgb(250, 250, 250); color: rgb(0, 0, 136);">int</span>=
<span style=3D"font-family: monospace; background-color: rgb(250, 250, 250)=
; color: rgb(0, 0, 0);">=C2=A0main</span><span style=3D"font-family: monosp=
ace; background-color: rgb(250, 250, 250); color: rgb(102, 102, 0);">(){<br=
></span><span style=3D"font-family: monospace; background-color: rgb(250, 2=
50, 250); color: rgb(136, 0, 0);">// Here the concept &#39;Callable&lt;&gt;=
&#39; is used at a non-deduced context (where no deduction happens)<br></sp=
an><span style=3D"font-family: monospace; background-color: rgb(250, 250, 2=
50); color: rgb(136, 0, 0);">// Therefore, the Callable&lt;&gt; will automa=
tically be interpreted as an <b>abstract class</b>=C2=A0(Dynamic Concept) t=
o which other types can be type erased to.<br></span><span style=3D"font-fa=
mily: monospace; background-color: rgb(250, 250, 250); color: rgb(0, 0, 0);=
">std</span><span style=3D"font-family: monospace; background-color: rgb(25=
0, 250, 250); color: rgb(102, 102, 0);">::</span><span style=3D"font-family=
: monospace; background-color: rgb(250, 250, 250); color: rgb(0, 0, 0);">ve=
ctor</span><span style=3D"font-family: monospace; background-color: rgb(250=
, 250, 250); color: rgb(102, 102, 0);">&lt;</span><span style=3D"font-famil=
y: monospace; background-color: rgb(250, 250, 250); color: rgb(102, 0, 102)=
;">Callable</span><span style=3D"font-family: monospace; background-color: =
rgb(250, 250, 250); color: rgb(102, 102, 0);">&gt;</span><span style=3D"fon=
t-family: monospace; background-color: rgb(250, 250, 250); color: rgb(0, 0,=
 0);">=C2=A0myVec</span><span style=3D"font-family: monospace; background-c=
olor: rgb(250, 250, 250); color: rgb(102, 102, 0);">;<br></span><span style=
=3D"font-family: monospace; background-color: rgb(250, 250, 250); color: rg=
b(0, 0, 0);">myVec</span><span style=3D"font-family: monospace; background-=
color: rgb(250, 250, 250); color: rgb(102, 102, 0);">.</span><span style=3D=
"font-family: monospace; background-color: rgb(250, 250, 250); color: rgb(0=
, 0, 0);">emplace</span><span style=3D"font-family: monospace; background-c=
olor: rgb(250, 250, 250); color: rgb(102, 102, 0);">(</span><span style=3D"=
font-family: monospace; background-color: rgb(250, 250, 250); color: rgb(0,=
 0, 0);">=C2=A0</span><span style=3D"font-family: monospace; background-col=
or: rgb(250, 250, 250); color: rgb(102, 102, 0);">&amp;</span><span style=
=3D"font-family: monospace; background-color: rgb(250, 250, 250); color: rg=
b(0, 0, 0);">func=C2=A0</span><span style=3D"font-family: monospace; backgr=
ound-color: rgb(250, 250, 250); color: rgb(102, 102, 0);">);<br></span><spa=
n style=3D"font-family: monospace; background-color: rgb(250, 250, 250); co=
lor: rgb(102, 102, 0);">}</span><span style=3D"font-family: monospace; back=
ground-color: rgb(250, 250, 250); color: rgb(0, 0, 0);"><br></span><span st=
yle=3D"font-family: monospace; background-color: rgb(250, 250, 250); color:=
 rgb(0, 0, 136);">class</span><span style=3D"font-family: monospace; backgr=
ound-color: rgb(250, 250, 250); color: rgb(0, 0, 0);">=C2=A0</span><span st=
yle=3D"font-family: monospace; background-color: rgb(250, 250, 250); color:=
 rgb(102, 0, 102);">MyClass</span><span style=3D"font-family: monospace; ba=
ckground-color: rgb(250, 250, 250); color: rgb(102, 102, 0);">{<br></span><=
span style=3D"font-family: monospace; background-color: rgb(250, 250, 250);=
 color: rgb(0, 0, 0);">=C2=A0std</span><span style=3D"font-family: monospac=
e; background-color: rgb(250, 250, 250); color: rgb(102, 102, 0);">::</span=
><span style=3D"font-family: monospace; background-color: rgb(250, 250, 250=
); color: rgb(0, 0, 0);">vector</span><span style=3D"font-family: monospace=
; background-color: rgb(250, 250, 250); color: rgb(102, 102, 0);">&lt;</spa=
n><span style=3D"font-family: monospace; background-color: rgb(250, 250, 25=
0); color: rgb(102, 0, 102);">Callable</span><span style=3D"font-family: mo=
nospace; background-color: rgb(250, 250, 250); color: rgb(102, 102, 0);">&g=
t;</span><span style=3D"font-family: monospace; background-color: rgb(250, =
250, 250); color: rgb(0, 0, 0);">=C2=A0myVec</span><span style=3D"font-fami=
ly: monospace; background-color: rgb(250, 250, 250); color: rgb(102, 102, 0=
);">;</span><span style=3D"font-family: monospace; background-color: rgb(25=
0, 250, 250); color: rgb(0, 0, 0);">=C2=A0</span><span style=3D"font-family=
: monospace; background-color: rgb(250, 250, 250); color: rgb(136, 0, 0);">=
// same applies here since we are in an undeduced context</span><span style=
=3D"font-family: monospace; background-color: rgb(250, 250, 250); color: rg=
b(0, 0, 0);"><br></span><span style=3D"font-family: monospace; background-c=
olor: rgb(250, 250, 250); color: rgb(0, 0, 0);">=C2=A0</span><span style=3D=
"font-family: monospace; background-color: rgb(250, 250, 250); color: rgb(0=
, 0, 136);">void</span><span style=3D"font-family: monospace; background-co=
lor: rgb(250, 250, 250); color: rgb(0, 0, 0);">=C2=A0set_vector</span><span=
 style=3D"font-family: monospace; background-color: rgb(250, 250, 250); col=
or: rgb(102, 102, 0);">(</span><span style=3D"font-family: monospace; backg=
round-color: rgb(250, 250, 250); color: rgb(0, 0, 0);">=C2=A0std</span><spa=
n style=3D"font-family: monospace; background-color: rgb(250, 250, 250); co=
lor: rgb(102, 102, 0);">::</span><span style=3D"font-family: monospace; bac=
kground-color: rgb(250, 250, 250); color: rgb(0, 0, 0);">vector</span><span=
 style=3D"font-family: monospace; background-color: rgb(250, 250, 250); col=
or: rgb(102, 102, 0);">&lt;</span><span style=3D"font-family: monospace; ba=
ckground-color: rgb(250, 250, 250); color: rgb(102, 0, 102);">Callable</spa=
n><span style=3D"font-family: monospace; background-color: rgb(250, 250, 25=
0); color: rgb(102, 102, 0);">&gt;</span><span style=3D"font-family: monosp=
ace; background-color: rgb(250, 250, 250); color: rgb(0, 0, 0);">=C2=A0newV=
ec=C2=A0</span><span style=3D"font-family: monospace; background-color: rgb=
(250, 250, 250); color: rgb(102, 102, 0);">){</span><span style=3D"font-fam=
ily: monospace; background-color: rgb(250, 250, 250); color: rgb(0, 0, 0);"=
>=C2=A0</span><span style=3D"font-family: monospace; background-color: rgb(=
250, 250, 250); color: rgb(136, 0, 0);">// This is still a function templat=
e where Callable might be deduced as std::function&lt;void()&gt;<br></span>=
<span style=3D"font-family: monospace; background-color: rgb(250, 250, 250)=
; color: rgb(0, 0, 0);">=C2=A0 </span><span style=3D"font-family: monospace=
; background-color: rgb(250, 250, 250); color: rgb(0, 0, 0);">std</span><sp=
an style=3D"font-family: monospace; background-color: rgb(250, 250, 250); c=
olor: rgb(102, 102, 0);">::</span><span style=3D"font-family: monospace; ba=
ckground-color: rgb(250, 250, 250); color: rgb(0, 0, 0);">move</span><span =
style=3D"font-family: monospace; background-color: rgb(250, 250, 250); colo=
r: rgb(102, 102, 0);">(</span><span style=3D"font-family: monospace; backgr=
ound-color: rgb(250, 250, 250); color: rgb(0, 0, 0);">newVec.begin(),newVec=
..end(),std::back_inserter(myVec)</span><span style=3D"font-family: monospac=
e; background-color: rgb(250, 250, 250); color: rgb(102, 102, 0);">);</span=
><span style=3D"font-family: monospace; background-color: rgb(250, 250, 250=
); color: rgb(0, 0, 0);">=C2=A0</span><span style=3D"font-family: monospace=
; background-color: rgb(250, 250, 250); color: rgb(136, 0, 0);">// Here an =
implicit conversion happens from the potentially specialized std::function&=
lt;<wbr>void()&gt; to type erased Callables</span></blockquote><blockquote =
class=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex; border-left: 1px =
solid rgb(204, 204, 204); padding-left: 1ex;"><span style=3D"font-family: m=
onospace; background-color: rgb(250, 250, 250); color: rgb(0, 0, 0);">=C2=
=A0</span><span style=3D"font-family: monospace; background-color: rgb(250,=
 250, 250); color: rgb(102, 102, 0);">}<br></span><span style=3D"font-famil=
y: monospace; background-color: rgb(250, 250, 250); color: rgb(102, 102, 0)=
;">}</span></blockquote><div><br></div><div>[...]</div><div><br></div><bloc=
kquote class=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex; border-lef=
t: 1px solid rgb(204, 204, 204); padding-left: 1ex;">`Callable&lt;&gt;` is =
a static concept, so if you want to make a dynamic concept based on it, you=
 must use some other syntax besides `Callable&lt;&gt;`.<br></blockquote><di=
v><br></div><div>Is this question now solved?</div><div>I should explicate =
here, that I personally strive for exactly this ambiguity to allow going ha=
nd in hand with &quot;normal&quot; concepts.<br></div><div>Actually, I see =
your point of ambiguity very clearly.</div><div>But maybe you have this per=
spective, because the different applications of a concepts name are not goi=
ng hand in hand (yet). Is that true?</div><div><br></div><div>In the follow=
ing I will argue, why we should strive to reconcile Dynamic and &quot;Stati=
c&quot; Concepts to go hand in hand with each other,</div><div>much like co=
mpile time and runtime constexpr function execution does.</div><div><br></d=
iv><div><br></div><div><font size=3D"4"><u>Plea to complete the symmetry to=
 constexpr functions:</u></font></div><div><font size=3D"4"><br></font></di=
v><div>Constexpr functions operate on Values. Values have to have a data ty=
pe, that means in an abstract way,</div><div><b>data types are concepts (su=
bsets of) the infinite set of potential values</b>.</div><div><br></div><di=
v>Concepts (from Concepts Lite) also represent subsets, but not upon values=
 but upon the infinite set of potential types.</div><div><br></div><div><i>=
Trying to interwine both principles:</i></div><div><ul><li>If you pass cons=
tant (known at compilation) values into a constexpr function, you immediate=
ly can work with it and determine everything you want at compile time.<br><=
/li><li>If you pass constant=C2=A0(known at compilation) types into a templ=
ated function/class, you immediately can work with it and determine everyth=
ing you want at compile time.<br></li><li>If you pass a dynamic (only known=
 at runtime) values into a constexpr function, you need to defer all work t=
o the run time.<br></li><li>If you pass a dynamic (only known at compilatio=
n due to polymorphism) types into a templated function/class, you need to d=
efer all work to runtime.</li></ul></div><div>Data types (as mentioned abov=
e), guarantee certain subset of possible values a variable of that type can=
 have.</div><div>Concepts guaratee a certain subsets of types.</div><div>In=
 order to be able to defer an operations on concrete types (restricted by a=
 concept) to run time,=C2=A0</div><div>dynamic concepts have to make the sy=
mmetry complete.</div><div><br></div><div><br></div><div>Yours cincerely,</=
div><div>Jakob</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/9a9e46d5-ed24-40d8-8451-8b32ec0146d5%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/9a9e46d5-ed24-40d8-8451-8b32ec0146d5=
%40isocpp.org</a>.<br />

------=_Part_1275_311731125.1494346788659--

------=_Part_1274_354219459.1494346788659--

.
