A co-worker asked about some code like this that originally had templates in it.
I have removed the templates, but the core question remains: why does this compile O
In this context object is a reference to a X, not a reference to a const X. The const qualifier would be applied to the member (i.e. the reference, but references can't be const), not to the referenced object.
If you change your class definition to not using a reference:
// ...
private:
X object;
// ...
you get the error you are expecting.