Return data from different types of conditional operation

biozic via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Apr 23 04:44:35 PDT 2015


On Thursday, 23 April 2015 at 10:26:09 UTC, rumbu wrote:
> On Thursday, 23 April 2015 at 10:06:45 UTC, John Colvin wrote:
>> On Thursday, 23 April 2015 at 09:48:21 UTC, Dennis Ritchie 
>> wrote:
>>> Hi,
>>> Why the program can not return different types of data from 
>>> the conditional operator?
>>>
>>> -----
>>> import std.stdio;
>>>
>>> auto foo() {
>>>
>>> 	if (true) {
>>> 		return 0;
>>> 	} else
>>> 		return "true";
>>> }
>>>
>>> void main() {
>>>
>>> 	writeln(foo);
>>> }
>>
>> import std.variant, std.stdio;
>>
>> auto foo()
>> {
>> 	if (true)
>> 		return Variant(0);
>> 	else
>> 		return Variant("Hello");
>> }
>>
>> void main()
>> {
>> 	foo.writeln;
>> }
>
> If 'true' is known at compile time, it works:
>
> auto foo() {
>
> 	static if (true) {
> 		return 0;
> 	} else
> 		return "true";
> }

Yes, but

auto foo() {
	static if (true) {
		return 0;
	} else
		this(statment) is [not.parsed];
}

so it's not just working around a problem of returned type 
inference.


More information about the Digitalmars-d-learn mailing list