binary_operator_base
void insert_left(binary_operator_base *new_left)
static_cast<binary_operator_base*>(lhs.get())->insert_left(new_left);
struct binary_operator : public binary_operator_base
binary_operator_base(l) {}
binary_operator_base(l), opName(o) {}
using typename binary_operator_base::result;
result r = (*binary_operator_base::rhs)();
binary_operator_base *expr = nullptr;
binary_operator_base *rhs_op =
static_cast<binary_operator_base*>(rhs.get());