On Thu, Jul 13, 2017 at 06:07:31PM +0000, JN via Digitalmars-d-learn wrote:
> Consider:
> 
> struct Foo
> {
>       int bar;
> }
> 
> void processFoo(Foo foo)
> {
> }
> 
> void main()
> {
>       Foo f = {bar: 5};
>       processFoo(f);                // ok
>       processFoo(Foo(5));           // ok
>       processFoo({bar: 5});         // fail
>       processFoo(Foo({bar: 5}));    // fail
> }
> 
> 
> Whyyyy D? It makes no sense, the compiler knows what is the type of
> the first processFoo arg anyway...

It's not quite so simple. Consider for example:

        struct Foo { int bar; }
        struct Oof { int bar; }

        void process(Foo foo) { }
        void process(Oof oof) { formatDisk(); }

        void main() {
                process({bar : 5}); // which overload should get called?
        }

As for `Foo({bar : 5})`, that's just wrong syntax. Just write `Foo(5)`
and it will work.


T

-- 
People demand freedom of speech to make up for the freedom of thought which 
they avoid. -- Soren Aabye Kierkegaard (1813-1855)

Reply via email to