Re: C++17 is feature complete

2016-07-07 Thread Enamex via Digitalmars-d

Some updates:
https://www.reddit.com/r/cpp/comments/4rj7us/trip_report_c_standards_meeting_in_oulu_june_2016/

Especially interesting are the mentions of 'accepted' 
features/proposals for 'C++20', including:
- `operator.` (opDispatch) which /might/ even make it into C++17 
given push by some international body; also includes some facets 
of `alias this` as it's hoped to be a core part of some of the 
reflection proposals [1]
- designated initializers (from C) (D's static initializers but 
tied to struct names and usable anywhere `MyStruct{ field2: 0, 
field1: 'a' }`;


and some requiring 'further thought' like:
- discriminated unions (even full-blown pattern matching); [2]
- 'overload sets as function arguments' (basically the delegate 
pattern in D for passing a lazily determined member function 
pointer (or an untyped closure in general));
- contracts ('expects = in' and 'ensures = out()' but they take 
one big boolean expression; a bit more complicated than in D, but 
they're adding them in, not taking them out) [3]
- 'parameter packs outside templates' which could go several ways 
from being basically native tuples with dedicated syntax, to 
almost (? not sure about differences in the proposal's 
specification vs behavior in D) the same thing as alias tuples in 
D now. [4]


I tried to focus on stuff already in D and stuff people are 
asking to add to D and the differences between the languages in 
them. I'll stop if it's deemed too off-topic :/


[1] http://wg21.link/p0252
http://wg21.link/p0352
http://wg21.link/p0060
[2] http://wg21.link/p0095r1
[3] 
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4415.pdf
[4] 
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0341r0.html


Re: C++17 is feature complete

2016-06-29 Thread Ola Fosheim Grøstad via Digitalmars-d

On Wednesday, 29 June 2016 at 16:38:07 UTC, Enamex wrote:
That's what I said. They're not in the C++17 spec but we won't 
be waiting for C++Next for them, hopefully.


Grafting a meaningful module system on top of a 40 years old 
language is full of pitfalls and making the wrong choice would be 
a disaster, so I would not expect to see it production in another 
3+ years...


But I don't really have performance issues related to include 
files. It is more of an annoyance, but you can work around it by 
being careful about what you include and how you structure your 
files (break frequently shared stuff into separate files).


What I do like about where C++ is heading is that they have set 
up a study group for game programmers and low latency programming 
(SG14).


D should do the same. :-P



Re: C++17 is feature complete

2016-06-29 Thread Enamex via Digitalmars-d
On Tuesday, 28 June 2016 at 19:27:36 UTC, Ola Fosheim Grøstad 
wrote:

On Tuesday, 28 June 2016 at 18:50:25 UTC, Enamex wrote:
Also, C++17 is 'getting' Modules and Concepts Lite later in 
tech specs... that don't even have working drafts according to 
this [https://isocpp.org/std/status] (but have experimental 
implementations in Clang and VC++, at least).


Modules is not part of C++17, it is on a separate track. 
Concepts are also not part of C++17.


Maybe it would be a good idea to not complain so much about 
languages you guys don't know much about.  I suggest focusing 
on making D better instead.


That's what I said. They're not in the C++17 spec but we won't be 
waiting for C++Next for them, hopefully.


And I complained about nothing; and know little about _any_ 
language; still so much to learn.


Re: C++17 is feature complete

2016-06-28 Thread Ola Fosheim Grøstad via Digitalmars-d

On Tuesday, 28 June 2016 at 18:50:25 UTC, Enamex wrote:
On Monday, 27 June 2016 at 19:47:14 UTC, Ola Fosheim Grøstad 
wrote:

Are you trolling me?


Please, no need to.


Huh?  What exactly are you trying to convey?

Also, C++17 is 'getting' Modules and Concepts Lite later in 
tech specs... that don't even have working drafts according to 
this [https://isocpp.org/std/status] (but have experimental 
implementations in Clang and VC++, at least).


Modules is not part of C++17, it is on a separate track. Concepts 
are also not part of C++17.


Maybe it would be a good idea to not complain so much about 
languages you guys don't know much about.  I suggest focusing on 
making D better instead.


Re: C++17 is feature complete

2016-06-28 Thread Enamex via Digitalmars-d
On Monday, 27 June 2016 at 19:47:14 UTC, Ola Fosheim Grøstad 
wrote:

On Monday, 27 June 2016 at 19:39:20 UTC, luminousone wrote:

OpenCL is for micro threading, not simd.


What is your point? Clang++ vector extensions use OpenCL 
semantics, so you need to look up the OpenCL spec to figure out 
what it supports. It is not well-documented in the Clang 
documentation.


Are you trolling me?


Please, no need to.

Also, C++17 is 'getting' Modules and Concepts Lite later in tech 
specs... that don't even have working drafts according to this 
[https://isocpp.org/std/status] (but have experimental 
implementations in Clang and VC++, at least).


Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d

On Monday, 27 June 2016 at 19:39:20 UTC, luminousone wrote:

OpenCL is for micro threading, not simd.


What is your point? Clang++ vector extensions use OpenCL 
semantics, so you need to look up the OpenCL spec to figure out 
what it supports. It is not well-documented in the Clang 
documentation.


Are you trolling me?



Re: C++17 is feature complete

2016-06-27 Thread luminousone via Digitalmars-d
On Monday, 27 June 2016 at 19:34:18 UTC, Ola Fosheim Grøstad 
wrote:

On Monday, 27 June 2016 at 19:32:39 UTC, luminousone wrote:
Its the nature of being compatible with C, it might not be 
explicitly stated in the spec, but the only place to put the 
vtable pointer and stay compatible with C structs is at the 
end.


No... You are making way too many assumptions.


By all means believe whatever delusion fits your corner of the 
universe.


Re: C++17 is feature complete

2016-06-27 Thread luminousone via Digitalmars-d
On Monday, 27 June 2016 at 18:58:25 UTC, Ola Fosheim Grøstad 
wrote:

On Monday, 27 June 2016 at 18:23:11 UTC, default0 wrote:
Regarding C++ I found this to be a fun read: 
http://yosefk.com/c++fqa/ :-)


A lot of it makes sense... C++ is what happens when you evolve, 
evolve, evolve and evolve a language from a starting-point that 
was not a high level language, desperately trying to hone it 
into high level shoes... Those shoes will never fit perfectly, 
obviously.


It gets even more expansive when you add inn compiler 
extensions. For instance gcc/clang simd extensions is basically 
taking in parts of OpenCL into C++. In order to figure out how 
they work you have to read the OpenCL spec... I only found out 
today that I can do "simd.even" and "simd.odd" to get even and 
odd elements from a simd register in Clang... after 
implementing it manually first. ;-/


OpenCL is for micro threading, not simd. OpenCL allows you to run 
thousands of instances of the same function in parallel, in 
either the cpu and/or the gpu.


SIMD or single instruction multiple data, is for instruction 
level parallelism,aka vector add op that adds 4 floats to 4 other 
floats in a single cpu instruction.


Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d

On Monday, 27 June 2016 at 19:32:39 UTC, luminousone wrote:
Its the nature of being compatible with C, it might not be 
explicitly stated in the spec, but the only place to put the 
vtable pointer and stay compatible with C structs is at the end.


No... You are making way too many assumptions.


Re: C++17 is feature complete

2016-06-27 Thread luminousone via Digitalmars-d
On Monday, 27 June 2016 at 16:48:16 UTC, Ola Fosheim Grøstad 
wrote:

On Monday, 27 June 2016 at 16:38:07 UTC, luminousone wrote:
easy to implement. In C++ the exact position of the vtable 
depends on what is in the base most class, it might be 8bytes 
in, maybe 20, maybe 200, you just don't know, And certainly 
the runtime can't know.


I know what the usual implementation is, but I don't believe it 
is required by the spec. So it is implementation defined and 
the runtime most certainly can know if that is part of the 
requirement. As I said, you don't even need to use a vtable 
AFAIK.


Can show me the section in the spec where it is required? I 
can't find it.


Its the nature of being compatible with C, it might not be 
explicitly stated in the spec, but the only place to put the 
vtable pointer and stay compatible with C structs is at the end. 
You will notice in D you can't inherit from a struct, this isn't 
merely design choice.


Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d

On Monday, 27 June 2016 at 18:23:11 UTC, default0 wrote:
Regarding C++ I found this to be a fun read: 
http://yosefk.com/c++fqa/ :-)


A lot of it makes sense... C++ is what happens when you evolve, 
evolve, evolve and evolve a language from a starting-point that 
was not a high level language, desperately trying to hone it into 
high level shoes... Those shoes will never fit perfectly, 
obviously.


It gets even more expansive when you add inn compiler extensions. 
For instance gcc/clang simd extensions is basically taking in 
parts of OpenCL into C++. In order to figure out how they work 
you have to read the OpenCL spec... I only found out today that I 
can do "simd.even" and "simd.odd" to get even and odd elements 
from a simd register in Clang... after implementing it manually 
first. ;-/





C++17 is feature complete

2016-06-27 Thread default0 via Digitalmars-d
Regarding C++ I found this to be a fun read: 
http://yosefk.com/c++fqa/ :-)


Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d

On Monday, 27 June 2016 at 16:38:07 UTC, luminousone wrote:
easy to implement. In C++ the exact position of the vtable 
depends on what is in the base most class, it might be 8bytes 
in, maybe 20, maybe 200, you just don't know, And certainly the 
runtime can't know.


I know what the usual implementation is, but I don't believe it 
is required by the spec. So it is implementation defined and the 
runtime most certainly can know if that is part of the 
requirement. As I said, you don't even need to use a vtable AFAIK.


Can show me the section in the spec where it is required? I can't 
find it.





Re: C++17 is feature complete

2016-06-27 Thread luminousone via Digitalmars-d
On Monday, 27 June 2016 at 16:10:13 UTC, Ola Fosheim Grøstad 
wrote:

On Monday, 27 June 2016 at 16:03:44 UTC, luminousone wrote:
C++ post pended vtable pointers, Are not implementation 
dependent.


I don't know what «post pended vtable pointers» means. Which 
section of the C++ spec are you referring to?


http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf


Member name lookup, Virtual functions, some where in their.

When you declare an object,

class a{
  int b;
  int c;
  //** the compiler puts a hidden variable here called the vtable 
pointer **//

  void **vtble;
  virtual void somefunc();
}

All of your virtual functions are referenced from this table; So 
that inherited classes will call the correct function based on 
the type of said object and the overrides in said object.


C#, D, put the vtable as the very first item in the base most 
class, C++ puts this as the last item in the base most class, C# 
and D use the first item in the vtable for type information 
generated by the compiler at compile time. Because the vtable is 
in the same place in ALL objects type reflection is very easy to 
implement. In C++ the exact position of the vtable depends on 
what is in the base most class, it might be 8bytes in, maybe 20, 
maybe 200, you just don't know, And certainly the runtime can't 
know.


Granted their are really bloated, slow, and memory chugging ways 
around this, such as storing a list of every allocated object in 
memory somewhere, and having reflection calls search this using 
an objects memory address.


Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d

On Monday, 27 June 2016 at 16:03:44 UTC, luminousone wrote:
C++ post pended vtable pointers, Are not implementation 
dependent.


I don't know what «post pended vtable pointers» means. Which 
section of the C++ spec are you referring to?


http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf



Re: C++17 is feature complete

2016-06-27 Thread luminousone via Digitalmars-d
On Monday, 27 June 2016 at 15:59:30 UTC, Ola Fosheim Grøstad 
wrote:

On Monday, 27 June 2016 at 15:54:16 UTC, luminousone wrote:
C++ has post pended vtable pointers on class objects, its 
unlikely good reflection can ever be added to the language, as 
the vtable may be in a different place in every object their 
is no way to access it universally for object type 
information. Some Compile time type reflection might be 
possible, But I bet it ends up being flimsy.


Huh? IIRC it is implementation defined in C++. There are C++ 
compilers/tools that provide more extensive reflection, but it 
is not part of the standard beyond simple typeid reflection.


C++ post pended vtable pointers, Are not implementation dependent.


Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d

On Monday, 27 June 2016 at 15:54:16 UTC, luminousone wrote:
C++ has post pended vtable pointers on class objects, its 
unlikely good reflection can ever be added to the language, as 
the vtable may be in a different place in every object their is 
no way to access it universally for object type information. 
Some Compile time type reflection might be possible, But I bet 
it ends up being flimsy.


Huh? IIRC it is implementation defined in C++. There are C++ 
compilers/tools that provide more extensive reflection, but it is 
not part of the standard beyond simple typeid reflection.




Re: C++17 is feature complete

2016-06-27 Thread luminousone via Digitalmars-d
On Monday, 27 June 2016 at 06:16:57 UTC, Ola Fosheim Grøstad 
wrote:

On Monday, 27 June 2016 at 05:33:24 UTC, luminousone wrote:

On Sunday, 26 June 2016 at 22:32:55 UTC, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:
  - template arguments that accept constant values of any 
type whatsoever

'template';


Still adding D features, I see!


Now if only they could bring over some of D's superior 
template syntax, all of the <>'s are so damned ugly, Or type 
reflection features(is this even possible in c++?).


Ugh, D's template syntax is far from superior :-(.

What kind of type reflection are you thinking of? C++ has 
static type traits and some very limited dynamic reflection for 
classes with virtual functions, but C++ is nowhere near 
Python's capabilities.


C++ does have a special interest group working on reflection:

https://root.cern.ch/blog/status-reflection-c


D's template syntax is vastly superior to C++...

C++ has post pended vtable pointers on class objects, its 
unlikely good reflection can ever be added to the language, as 
the vtable may be in a different place in every object their is 
no way to access it universally for object type information. Some 
Compile time type reflection might be possible, But I bet it ends 
up being flimsy.




Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d
On Monday, 27 June 2016 at 15:49:20 UTC, Ola Fosheim Grøstad 
wrote:

On Monday, 27 June 2016 at 15:43:03 UTC, luminousone wrote:
Modern C++ is a train-wreck, I don't think we should consider 
D features around the flaws of another language.


RAII is the same in C++, but actually better supported in C++ 
atm.


I meant: Issues around RAII are the same in D as in C++.



Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d

On Monday, 27 June 2016 at 15:43:03 UTC, luminousone wrote:
Modern C++ is a train-wreck, I don't think we should consider D 
features around the flaws of another language.


RAII is the same in C++, but actually better supported in C++ atm.

Luckily we don't have to code with the worry of labyrinth like 
namespaces so deep and bloated that the language needs a 
special keyword to let the compiler know that the following 
blobby mass is a typename.


Namespaces tend to be shallow, not deep. "typename" is a syntax 
compatibility issue, not a namespace issue. I don't think I 
understand your argument?


But if D keeps adding syntactical sugar and many ways of doing 
the same thing like C++, it will end up in the same bloated spot 
with no hope of recovery.




Re: C++17 is feature complete

2016-06-27 Thread luminousone via Digitalmars-d
On Monday, 27 June 2016 at 15:16:19 UTC, Ola Fosheim Grøstad 
wrote:

On Monday, 27 June 2016 at 14:57:10 UTC, Patrick Schluter wrote:
I forgot. No it's not more readable, to the contrary. The 
issue is that normally { } introduces an indentation, which is 
always associated with some kind of branching. Adding an 
indentation just for the declaration of a variable is an 
inconsistency annoying to read. I had the case several times 
in the code I was transforming and it had me each time puzzled 
at where the loop or condition was.


I see your point, but I like to keep conditional clean. Usually 
the expression is long when  I have to check an error code in 
C++. I don't think the following is easy on my eyes and it is 
not at all clear where the destructor is called:


if ( auto file = 
::tool::filesystem::open("/path/to/somewhere/xx"); file != 
nullptr) {

   ...
}  else if(…) {
...
} else {
...
}

I think this is easier to read, and the location for the 
destruction is obvious:


{
auto file = 
::tool::filesystem::open("/path/to/somewhere/xx");


if ( file != nullptr ) {
   ...
}  else if(…) {
   ...
} else {
   ...
}
}

In modern C++ one has to think about introducing scopes to gain 
control over where RAII is created and destructed.


Modern C++ is a train-wreck, I don't think we should consider D 
features around the flaws of another language.


Luckily we don't have to code with the worry of labyrinth like 
namespaces so deep and bloated that the language needs a special 
keyword to let the compiler know that the following blobby mass 
is a typename.


Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d

On Monday, 27 June 2016 at 14:57:10 UTC, Patrick Schluter wrote:
I forgot. No it's not more readable, to the contrary. The issue 
is that normally { } introduces an indentation, which is always 
associated with some kind of branching. Adding an indentation 
just for the declaration of a variable is an inconsistency 
annoying to read. I had the case several times in the code I 
was transforming and it had me each time puzzled at where the 
loop or condition was.


I see your point, but I like to keep conditional clean. Usually 
the expression is long when  I have to check an error code in 
C++. I don't think the following is easy on my eyes and it is not 
at all clear where the destructor is called:


if ( auto file = 
::tool::filesystem::open("/path/to/somewhere/xx"); file != 
nullptr) {

   ...
}  else if(…) {
...
} else {
...
}

I think this is easier to read, and the location for the 
destruction is obvious:


{
auto file = ::tool::filesystem::open("/path/to/somewhere/xx");

if ( file != nullptr ) {
   ...
}  else if(…) {
   ...
} else {
   ...
}
}

In modern C++ one has to think about introducing scopes to gain 
control over where RAII is created and destructed.




Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d

On Monday, 27 June 2016 at 14:19:16 UTC, jmh530 wrote:

On Sunday, 26 June 2016 at 22:32:55 UTC, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:
  - template arguments that accept constant values of any 
type whatsoever

'template';


Still adding D features, I see!


constexpr if looks a lot like static if to me.


I don't think it is like static if. AFAIK it cannot turn off 
member fields and it cannot turn off static_asserts.  "if 
constexpr" is primarily for preventing instantiation issues, so 
it does not introduce a separate compilation stage like in D.


In C++ this will fail to compile:

if constexpr(false){
static_assert(false);
}



Re: C++17 is feature complete

2016-06-27 Thread Patrick Schluter via Digitalmars-d
On Monday, 27 June 2016 at 06:52:58 UTC, Ola Fosheim Grøstad 
wrote:

On Monday, 27 June 2016 at 03:09:46 UTC, Meta wrote:

On Sunday, 26 June 2016 at 22:32:55 UTC, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:
  - template arguments that accept constant values of any 
type whatsoever

'template';


Still adding D features, I see!


Imitation is the sincerest form of flattery, so when is 
destructuring coming to D?


Also, the `if (init; condition) and switch (init; condition)` 
seems like a very nice idea.


It's from Go,  I don't see much value in it. You can just wrap 
the if in a block:


{
  init;
  if(condition)…
}

That is usually more readable IMO.
I forgot. No it's not more readable, to the contrary. The issue 
is that normally { } introduces an indentation, which is always 
associated with some kind of branching. Adding an indentation 
just for the declaration of a variable is an inconsistency 
annoying to read. I had the case several times in the code I was 
transforming and it had me each time puzzled at where the loop or 
condition was.





Re: C++17 is feature complete

2016-06-27 Thread Patrick Schluter via Digitalmars-d
On Monday, 27 June 2016 at 06:52:58 UTC, Ola Fosheim Grøstad 
wrote:

On Monday, 27 June 2016 at 03:09:46 UTC, Meta wrote:

On Sunday, 26 June 2016 at 22:32:55 UTC, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:
  - template arguments that accept constant values of any 
type whatsoever

'template';


Still adding D features, I see!


Imitation is the sincerest form of flattery, so when is 
destructuring coming to D?


Also, the `if (init; condition) and switch (init; condition)` 
seems like a very nice idea.


It's from Go,  I don't see much value in it. You can just wrap 
the if in a block:


{
  init;
  if(condition)…
}

That is usually more readable IMO.


No, it's the logical conclusion from the for(init; condition; 
increment) loop and the declare a variable anywhere feature, 
introduced in C++ long time ago.


It's funny that C++ now will introduce it, as I had the same idea 
a couple of weeks ago for C. I'm currently in the process of 
transforming old legacy C code that had all their variables 
declared at the top, to a more modern style, using C99 feature 
taken from C++, i.e. vars only declared and initialized when they 
are used and using for(initdeclaration;...) style.
It appeared quite rapidly that in a lot of cases the if(init; and 
switch(init; would have been nice as it would have brought a lot 
of regularity in the code and it allows to limit the scope of a 
temporary variable really to the section it is used in without 
overloading the code with { and }.


btw: I was first quite skeptical of the gain to be had of that 
scope reduction transformation, but after discovering several 
serious bugs in our code because of scope errors, I am now 
transforming more systematically to that style our 200K lines of 
C code.


Re: C++17 is feature complete

2016-06-27 Thread rikki cattermole via Digitalmars-d

On 28/06/2016 2:19 AM, jmh530 wrote:

On Sunday, 26 June 2016 at 22:32:55 UTC, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:

  - template arguments that accept constant values of any type
whatsoever
'template';


Still adding D features, I see!


constexpr if looks a lot like static if to me.


You're not alone on that one.


Re: C++17 is feature complete

2016-06-27 Thread jmh530 via Digitalmars-d

On Sunday, 26 June 2016 at 22:32:55 UTC, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:
  - template arguments that accept constant values of any type 
whatsoever

'template';


Still adding D features, I see!


constexpr if looks a lot like static if to me.


Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d

On Monday, 27 June 2016 at 03:09:46 UTC, Meta wrote:

On Sunday, 26 June 2016 at 22:32:55 UTC, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:
  - template arguments that accept constant values of any 
type whatsoever

'template';


Still adding D features, I see!


Imitation is the sincerest form of flattery, so when is 
destructuring coming to D?


Also, the `if (init; condition) and switch (init; condition)` 
seems like a very nice idea.


It's from Go,  I don't see much value in it. You can just wrap 
the if in a block:


{
  init;
  if(condition)…
}

That is usually more readable IMO.


Re: C++17 is feature complete

2016-06-27 Thread Ola Fosheim Grøstad via Digitalmars-d

On Monday, 27 June 2016 at 05:33:24 UTC, luminousone wrote:

On Sunday, 26 June 2016 at 22:32:55 UTC, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:
  - template arguments that accept constant values of any 
type whatsoever

'template';


Still adding D features, I see!


Now if only they could bring over some of D's superior template 
syntax, all of the <>'s are so damned ugly, Or type reflection 
features(is this even possible in c++?).


Ugh, D's template syntax is far from superior :-(.

What kind of type reflection are you thinking of? C++ has static 
type traits and some very limited dynamic reflection for classes 
with virtual functions, but C++ is nowhere near Python's 
capabilities.


C++ does have a special interest group working on reflection:

https://root.cern.ch/blog/status-reflection-c



Re: C++17 is feature complete

2016-06-26 Thread luminousone via Digitalmars-d

On Sunday, 26 June 2016 at 22:32:55 UTC, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:
  - template arguments that accept constant values of any type 
whatsoever

'template';


Still adding D features, I see!


Now if only they could bring over some of D's superior template 
syntax, all of the <>'s are so damned ugly, Or type reflection 
features(is this even possible in c++?).


Re: C++17 is feature complete

2016-06-26 Thread Meta via Digitalmars-d

On Sunday, 26 June 2016 at 22:32:55 UTC, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:
  - template arguments that accept constant values of any type 
whatsoever

'template';


Still adding D features, I see!


Imitation is the sincerest form of flattery, so when is 
destructuring coming to D?


Also, the `if (init; condition) and switch (init; condition)` 
seems like a very nice idea.


Re: C++17 is feature complete

2016-06-26 Thread mogu via Digitalmars-d

On Sunday, 26 June 2016 at 22:32:55 UTC, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:
  - template arguments that accept constant values of any type 
whatsoever

'template';


Still adding D features, I see!


Now cpp has structured bindings although it's a limited version 
of match. So when will DIP32 and match be taken into 
consideration in D?


Re: C++17 is feature complete

2016-06-26 Thread Walter Bright via Digitalmars-d

On 6/26/2016 3:32 PM, Walter Bright wrote:

On 6/26/2016 10:18 AM, Enamex wrote:

  - template arguments that accept constant values of any type whatsoever
'template';


Still adding D features, I see!



Reading:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0127r1.html

shows it is something else.


Re: C++17 is feature complete

2016-06-26 Thread Walter Bright via Digitalmars-d

On 6/26/2016 10:18 AM, Enamex wrote:

  - template arguments that accept constant values of any type whatsoever
'template';


Still adding D features, I see!



Re: C++17 is feature complete

2016-06-26 Thread Ola Fosheim Grøstad via Digitalmars-d

On Sunday, 26 June 2016 at 17:18:48 UTC, Enamex wrote:
  - specified order of evaluation for function calls and any 
syntax with arguments (including built-in operators on 
primitive types).


But not on the arguments, as that will harm optimization too 
much. I believe this change was triggered by the lack of 
transparency in expressions with more complicated "chaining" of 
function calls/function-objects.


So in "expr1(expr2,expr3)" expr1 is evaluated first, but expr2 
and expr3 can be evaluated in any order. Right?





Re: C++17 is feature complete

2016-06-26 Thread Ola Fosheim Grøstad via Digitalmars-d

On Sunday, 26 June 2016 at 18:16:32 UTC, Jack Stouffer wrote:
Please be excited for modules, coming out three years from now 
(plus implementation time).


It is actually a good thing that they delay modules. It is 
difficult to get right, but it is on a separate track so it can 
come before C++Next.


The most important parts of C++17 is related to ironing out 
language quirks and providing library additions: some significant 
improvements to meta-programming, file system support and C11 
support which brings in things like aligned_alloc.


There is a significant signal in reserving the namespace 
"std"+digits, meaning there will be a major standard library 
update in C++Next (related to "ranges").




Re: C++17 is feature complete

2016-06-26 Thread Jack Stouffer via Digitalmars-d

On Sunday, 26 June 2016 at 17:18:48 UTC, Enamex wrote:

https://www.reddit.com/r/cpp/comments/4pmlpz/what_the_iso_c_committee_added_to_the_c17_working/

Added stuff like:
  - a very limited destructuring syntax (structured bindings) 
(use case is for tuples; but likely to use a new reserved 
function name for general struct destructuring (like 'get<>()' 
or something);
  - template arguments that accept constant values of any type 
whatsoever 'template';

  - 'constexpr if';
  - specified order of evaluation for function calls and any 
syntax with arguments (including built-in operators on 
primitive types).


Please be excited for modules, coming out three years from now 
(plus implementation time).


C++17 is feature complete

2016-06-26 Thread Enamex via Digitalmars-d

https://www.reddit.com/r/cpp/comments/4pmlpz/what_the_iso_c_committee_added_to_the_c17_working/

Added stuff like:
  - a very limited destructuring syntax (structured bindings) 
(use case is for tuples; but likely to use a new reserved 
function name for general struct destructuring (like 'get<>()' or 
something);
  - template arguments that accept constant values of any type 
whatsoever 'template';

  - 'constexpr if';
  - specified order of evaluation for function calls and any 
syntax with arguments (including built-in operators on primitive 
types).