July 15, 2016
abstract class AbstractObject(S)
if (IsSomeString!S)
{
}

class OtherObject(S, bool R) : AbstractObject!S
{
    int x;
    void Foo(int a, int b)
    {
        x = a + b;
        static if (R)  // error
        {
           // more codes .....
        }
    }
}

class OtherObjects(S) : AbstractObject!S
{
    OtherObject!(S, bool) a, b;   // error

    a = new OtherObject!(S, true)();
    b = new OtherObject!(S, false)();
}

July 15, 2016
Use an intermediate class:

abstract class OtherObject1(S) : AbstractObject!S
{
    abstract void Foo(int a, int b);

class OtherObject(S, bool R) : OtherObject1!S
{
    int x;
    override void Foo(int a, int b)