[std.traits] Detect complex numbers

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Wed Jan 14 05:40:19 PST 2015


On Wednesday, 14 January 2015 at 13:38:05 UTC, Luc Bourhis wrote:
> There is "isFloatingPointType!T" to find out whether type T is 
> one of the floating point types but I could not find anything 
> equivalent for complex numbers (cdouble, cfloat, creal) in 
> Phobos 2.066 (which I installed with MacPorts for the record). 
> Am I missing something?
>
> My goal was to detect types suitable as scalars in a linear 
> algebra context. I had to do it by hand:
>
> enum bool supportedScalar(T) = is(ScalarTypeOf!T) && 
> !isAggregateType!T;
>
> private {
>   alias ScalarTypeList = TypeTuple!(float, double, real,
>                                     cfloat, cdouble, creal);
>   template ScalarTypeOf(T) {
>       static if (is(AliasThisTypeOf!T AT) && !is(AT[] == AT))
>           alias X = ScalarTypeOf!AT;
>       else
>           alias X = OriginalType!T;
>
>       static if (staticIndexOf!(Unqual!X, ScalarTypeList) >= 0)
>           alias ScalarTypeOf = X;
>       else
>           static assert(0, T.stringof~" is not a floating point 
> type");
>   }
> }

It doesn't answer your question as such, but you should take a 
look at:
http://dlang.org/phobos/std_complex.html


More information about the Digitalmars-d mailing list