[std.traits] Detect complex numbers

Luc Bourhis via Digitalmars-d digitalmars-d at puremagic.com
Wed Jan 14 05:38:03 PST 2015


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");
   }
}




More information about the Digitalmars-d mailing list