How can I check if template variable parameter is iterable before handle it?

Marcone marcone at email.com
Sun Feb 21 13:08:18 UTC 2021


On Sunday, 21 February 2021 at 12:47:46 UTC, Boris Carvajal wrote:
> On Sunday, 21 February 2021 at 11:58:11 UTC, Marcone wrote:
>> import std;
>>
>> void foo(T)(T bar){
>> 	static if (bar.isiterable()) // Need Somethin to check if bar 
>> is iterable.
>> 	{
>> 		// Execute it if bar is iterable.
>> 		foreach (i; bar)
>> 		{
>>
>> 		}
>> 	}
>> 	else {
>> 		// Execute it if bar is NOT iterable.
>> 	}
>>
>> }
>>
>> void main(){
>> 	foo(1);
>> 	foo([1, 2, 3, 4, 5]);
>> }
>
> https://dlang.org/library/std/traits/is_iterable.html
>
> import std.traits : isIterable;
>
> void foo(T)(T bar){
>     static if (isIterable!T)
>     {
> ...

Thank you.

// Function isiterable()
bool isiterable(T)(T arg) nothrow {try {static if 
(isIterable!T){return true;} else {return false;}} 
catch(Throwable){return false;}}


More information about the Digitalmars-d-learn mailing list