Thread overview
nested function overloading
Jun 17
bauss
Jun 17
bauss
3 days ago
monkyyy
1 day ago
Chris Katko
June 17

I don't need this functionality, but I wanted to be sure.

Does function overloading not work with nested functions? I got a compiler error (something like "function already defined") when I tried it.

June 17

On Friday, 17 June 2022 at 12:09:33 UTC, Chris Katko wrote:

>

I don't need this functionality, but I wanted to be sure.

Does function overloading not work with nested functions? I got a compiler error (something like "function already defined") when I tried it.

According to the spec then nested functions cannot be overloaded:

"Nested functions cannot be overloaded."

See: 19.17.1.3

https://dlang.org/spec/function.html#nested

June 17

On Friday, 17 June 2022 at 12:19:33 UTC, bauss wrote:

>

On Friday, 17 June 2022 at 12:09:33 UTC, Chris Katko wrote:

>

I don't need this functionality, but I wanted to be sure.

Does function overloading not work with nested functions? I got a compiler error (something like "function already defined") when I tried it.

According to the spec then nested functions cannot be overloaded:

"Nested functions cannot be overloaded."

See: 19.17.1.3

https://dlang.org/spec/function.html#nested

Thanks!

re: documentation. That is one-line tiny footnote in a page that's over 85 pages long on my browser. :) I could easily see many people missing it until they encounter it.

June 17

On Friday, 17 June 2022 at 13:04:47 UTC, Chris Katko wrote:

>

On Friday, 17 June 2022 at 12:19:33 UTC, bauss wrote:

>

On Friday, 17 June 2022 at 12:09:33 UTC, Chris Katko wrote:

>

I don't need this functionality, but I wanted to be sure.

Does function overloading not work with nested functions? I got a compiler error (something like "function already defined") when I tried it.

According to the spec then nested functions cannot be overloaded:

"Nested functions cannot be overloaded."

See: 19.17.1.3

https://dlang.org/spec/function.html#nested

Thanks!

re: documentation. That is one-line tiny footnote in a page that's over 85 pages long on my browser. :) I could easily see many people missing it until they encounter it.

I agree, I didn't know about it either and only found out because I decided to search on the page for functions under nested functions.

5 days ago

On 6/17/22 8:09 AM, Chris Katko wrote:

>

I don't need this functionality, but I wanted to be sure.

Does function overloading not work with nested functions? I got a compiler error (something like "function already defined") when I tried it.

Correct, it's not allowed.

However, you can define a function template to get effectively overloading based on parameter type.

And you can also use an inner struct to define overloaded functions.

-Steve

3 days ago

On Monday, 20 June 2022 at 13:20:51 UTC, Steven Schveighoffer wrote:

>

And you can also use an inner struct to define overloaded functions.

I believe templates make a better bandaid

void main(){
	template bar(){
		void bar_(int){}
		void bar_(float){}
		alias bar=bar_;
	}
	bar(1);
	bar(3.14);
}
3 days ago

On 6/22/22 2:05 AM, monkyyy wrote:

>

On Monday, 20 June 2022 at 13:20:51 UTC, Steven Schveighoffer wrote:

>

And you can also use an inner struct to define overloaded functions.

I believe templates make a better bandaid

void main(){
     template bar(){
         void bar_(int){}
         void bar_(float){}
         alias bar=bar_;
     }
     bar(1);
     bar(3.14);
}

Wow, I never thought of that, it's a great idea! You don't even need to use the alias.

void main(){
    template bar(){
        void bar(int){}
        void bar(float){}
    }
    bar(1);
    bar(3.14);
}

-Steve

1 day ago

On Wednesday, 22 June 2022 at 12:42:48 UTC, Steven Schveighoffer wrote:

>

On 6/22/22 2:05 AM, monkyyy wrote:

>

On Monday, 20 June 2022 at 13:20:51 UTC, Steven Schveighoffer wrote:

>

And you can also use an inner struct to define overloaded functions.

I believe templates make a better bandaid

void main(){
     template bar(){
         void bar_(int){}
         void bar_(float){}
         alias bar=bar_;
     }
     bar(1);
     bar(3.14);
}

Wow, I never thought of that, it's a great idea! You don't even need to use the alias.

void main(){
    template bar(){
        void bar(int){}
        void bar(float){}
    }
    bar(1);
    bar(3.14);
}

-Steve

Wow! That's great! Another trick to add to my toolbox.