[python] Fix constructor of DiscreteFunction
I was surprised to still get deprecation warnings for
DefaultNodeToRangeMap
from the python bindings.
This is triggered by passing the result of
makeDefaultNodeToRangeMap()
to
std::make_shared<HierarchicNodeToRangeMap>()
.
This cannot compile at all and is the result of
a bug that I introduced this bug when changing
DefaultNodeToRangeMap
to HierarchicNodeToRangeMap
here.
It turns out that the compiler did not complain about this
obvious error, because the template was never instantiated
due to SFINAE:
There are two overloads of registerDiscreteFunctionConstructor()
,
the broken one and a completely empty one.
The broken one has a template parameter TreePath
.
This is not passed explicitly but can also not be deduced,
since the function arguments do not depend on it.
Thus the empty default overload was always selected.
As a result the python class DiscreteFunction
lost its
constructor and could only be constructed from the
C++ side. Since this is an anonymous generated type,
this was never tested and thus did not trigger an error.
(Interestingly, the old version with DefaultNodeToRangeMap
was also buggy, because it tried to call a non-existing
constructor of the C++ class. Maybe this was also ruled
out by a substitution failure that no one ever noticed
due to a missing test.)
This MR fixes the bug, adds a check of the constructor, and removes the now unused include of the deprecated header.