Infer function template parameters
Jonas Drewsen
jdrewsen at nospam.com
Mon Sep 24 10:18:09 PDT 2012
On Monday, 24 September 2012 at 10:05:49 UTC, Jonathan M Davis
wrote:
> On Monday, September 24, 2012 10:37:04 Jonas Drewsen wrote:
>> On Saturday, 22 September 2012 at 07:48:14 UTC, Simen Kjaeraas
>>
>> wrote:
>> > On 2012-09-21, 21:29, Jonas Drewsen wrote:
>> >> A mentioned in the proposal (albeit not very clear) it
>> >> requires non-templated function definitions to include both
>> >> type and param names. If only one name is provided in a
>> >> definition is always a param name. Unfortunately this is a
>> >> breaking change for some code and that does speak against
>> >> the
>> >> proposal.
>> >
>> > Not only is it a breaking change, it breaks one of the basic
>> > design
>> > desiderata of D - if it's valid C it either fails to compile
>> > or
>> > compiles
>> > with the same behavior as in C.
>>
>> I guess it is not that basic of a desiderata after all :)
>>
>> http://www.prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP19
>
> It has been broken upon rare occasion (e.g. static arrays are
> value types in
> D, not reference types like in C), but it's quite rare, and
> removing the
> comera operator doesn't necessarily break it. In fact, just
> removing the comma
> operator _definitely_ doesn't break it, because it just makes
> more C code
> invalid. The point is that C/C++ will compile as valid D code
> with the same
> semantics or that it won't compile, _not_ that C/C++ will
> compile as valid D
> code. The whole point is to avoid silent behavioral changes
> when porting C/C++
> code to D.
>
> Now, that being said, if tuples are added to the language
> proper (which that
> DIP doesn't do), that may or may not make it so that C/C++ code
> will end up
> compiling with different semantics when ported. I'd have to
> study the situation
> much more closely to be sure, but I suspect that it wouldn't,
> precisely
> because the types involved change and C doesn't have auto in
> the same way that
> D does (or any kind of type inferrence at all really), so the
> change in type
> would cause compilation failure, thereby avoiding silent
> behavioral changes.
>
> - Jonathan M Davis
What about:
int fun() {
return (0, "abc")[0];
}
in the comma operator case it would return 'a' as an int.
in the tuple case it would return 0
/Jonas
More information about the Digitalmars-d
mailing list