Printing shortest decimal form of floating point number with Mir

Petar Petar
Mon Jan 4 12:54:53 UTC 2021


On Monday, 4 January 2021 at 12:35:12 UTC, John Colvin wrote:
> On Monday, 4 January 2021 at 09:21:02 UTC, Ola Fosheim Grøstad 
> wrote:
>> On Monday, 4 January 2021 at 09:18:50 UTC, Ola Fosheim Grøstad 
>> wrote:
>>> On Monday, 4 January 2021 at 05:55:37 UTC, Ola Fosheim 
>>> Grostad wrote:
>>>> On Monday, 4 January 2021 at 04:37:22 UTC, 9il wrote:
>>>>> [...]
>>>>
>>>> But it is a bug even if there was no C++... An alias should 
>>>> work by simple substitution, if it does not, then it is no 
>>>> alias...
>>>
>>> Here is an even simpler example that does not work:
>>>
>>> struct Foo(T){}
>>> void foo(T)(T!int x) {}
>>>
>>> alias FooInt = Foo!int;
>>>
>>> void main() {
>>>     foo(FooInt());
>>> }
>>
>> Oh, now wait, it does:
>>
>> struct Foo(T){}
>> void foo(alias T)(T!int x) {}
>> alias FooInt = Foo!int;
>>
>> void main() {
>>     foo(FooInt());
>> }
>>
>> My mistake.
>
> What's the simplest example that doesn't work and is that 
> simple example just indirection through an alias or is it 
> actually indirection through a template that *when 
> instantiated* turns out to be just an alias?
>
> I have a suspicion that what you're asking for here is the 
> type-inference to have x-ray vision in to uninstantiated 
> templates that works for a few simple cases. Am I wrong?
>
> To be clear, a really useful special case can be really useful 
> and worthwhile, but I'm not convinced this is the principled 
> "type system bug" you are saying it is.

I don't have time to post an example, but x-ray vision is far 
from what is asked for, just following basic rules established in 
type system theory decades ago.
In practice I've had many instances where TypeScript would 
correctly perform generic type unification while dmd gives up at 
the first bump in the road.


More information about the Digitalmars-d-announce mailing list