Not sure this static if is necessary: even if `_input.front = v;` returns a void, `return _input.front = v;` works just fine. Furthermore, opAssign could return something that may or may not be of type ElementType, such a return code for success or something.

Also, auto ref on both ends should make things better eg:
```D
@property auto ref front(auto ref ElementType!R v) 
{
                    assert(!empty,
                        "Attempting to assign to the front of an empty "
                        ~ typeof(this).stringof);

     return _input.front = v; 
}
```

is just a simple and efficient.