Should this compile?

Timon Gehr via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Aug 26 13:02:34 PDT 2015


On 08/26/2015 09:55 PM, Timon Gehr wrote:
> On 08/25/2015 08:29 PM, Vladimir Panteleev wrote:
>>
>> I think this is a bug, but is easily worked around with:
>>
>> auto test(string a) {
>>      return .test(a, "b");
>> }
>>
>> I suspect that the reason the error occurs, is that the auto return type
>> automatically rewrites the function declaration into an eponymous
>> template declaration.  ...
>
> No true. In fact, doing so manually works around the problem. :o)
>
> This compiles and runs:
>
> import std.stdio;
> import std.range : chain;
>
> auto test()(string a) {
>      return test(a,"b");
> }
>
> auto test(string a,string b) {
>      return chain(a,b);
> }
>
> void main() {
>      writeln(test("a"));
> }

Another workaround is to order the declarations in the opposite way:

import std.stdio;
import std.range : chain;

auto test(string a,string b) {
     return chain(a,b);
}
auto test(string a) {
     return test(a,"b");
}
void main() {
     writeln(test("a"));
}




More information about the Digitalmars-d-learn mailing list