module des.isys.neiro.traits;

public import std.traits;

pure nothrow
{
    bool canSummate(T)()
    { return is( typeof( T.init + T.init ) == T ); }

    bool canMultiplicate(T,N)()
    { return is( typeof( T.init * N.init ) == T ); }

    bool canFindMean(T)()
    { return is( typeof( (T.init + T.init) / 2.0 ) : T ); }

    bool canComparison(T)()
    { return is( typeof( T.init > T.init ) == bool ) &&
             is( typeof( T.init == T.init ) == bool ); }
}

unittest
{
    assert( canSummate!int );
    assert( canSummate!float );
    assert( canMultiplicate!(float,int) );
}

unittest
{
    assert( !canFindMean!int );
    assert( canFindMean!float );
}

unittest
{
    assert( canComparison!int );
    assert( canComparison!float );
}