Printing shortest decimal form of floating point number with Mir

John Colvin john.loughran.colvin at gmail.com
Mon Jan 4 17:22:55 UTC 2021


On Monday, 4 January 2021 at 13:47:17 UTC, Ola Fosheim Grøstad 
wrote:
> On Monday, 4 January 2021 at 12:35:12 UTC, John Colvin wrote:
>> 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?
>
> Indirection through a parametric alias. This is the simplest I 
> have come up with so far:
>
>
>   struct Foo(T) {}
>
>   alias Bar(T) = Foo!T;
>
>   void f(T)(Bar!T x) {}
>
>   void main() {
>     f(Bar!int());
>   }
>
>
> I created a thread for it:
>
> https://forum.dlang.org/post/nxrfrizqdmhzhivxptsb@forum.dlang.org
>
>
>> 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?
>
> No, just substitute: "Bar!int" with "Foo!int".
>
>
>> 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.
>
> Why are you not convinced?
>
> An alias is a short hand. If it is possible to discriminate by 
> the alias and the actual object then that it a semantic problem.

I have a longer reply I'm trying to write, but just to make sure 
I'm on the right track:

     template Foo(T) {
         alias Foo = T;
     }

     template Q(A : Foo!T, T) {
         pragma(msg, A.stringof, " ", T.stringof);
     }

     alias X = Q!(Foo!int);

in your opinion, this should compile and msg `int int`, yes?

I'm trying to make a really concise example without using IFTI.


More information about the Digitalmars-d-announce mailing list