You are passing a temporary Base
object here:
b.something(Base());
but you try to bind that to a non-const lvalue reference here:
void something(Base& b){}
This is not allowed in standard C++. You need a const
reference.
void something(const Base& b){}
When you do this:
Base c;
b.something(c);
you are not passing a temporary. The non-const reference binds to c
.