> Hmm. It seems that, in your opinion, e.g. if we used an alternative interface like get_mixable(), then it could be used to modify object relationships around the algorithm, so it also should not be const. Is it right?

I focus attention on side effects. `get_mixable()` can be `const` because it has no side effect.

>> How about using a member function like ``get_mixable()`` const?
>
>``register_mixables`` may register more than one mixables to the holder, and it can be "nested", i.e. an algorithm may have a sub-algorithm that has its own mixables (e.g. anomaly algorithms). So this intrusive interface of ``register_mixables`` is more useful, I think.

Then, how about using function like
```
void apply_for_each_mixables(function<void(mixable_holder&)>) const;
```
, or renaming `register_mixables` to `register_mixables_to_holder`?
I think `register_mixables` is not best name.