On 2018/04/23 23:55:44, Dan Eble wrote:
David, would you accept a template class wrapping a non-null pointer,
perhaps
non_null_ptr<T>? Conversion to a raw pointer would be implicit, but construction from a raw pointer would be explicit. The person
constructing such
a pointer is responsible for ensuring that it is not null. The person
who uses
such a pointer trusts that it is not.
That would retain the pointers that you value and add the nullness
information
that I value.
Please note that all of your proposals so far do _not_ provide the nullness information that you value in any manner: previously undefined behavior would continue to be undefined behavior and would just look differently. Either way, to make this work at all in a mechanical manner, you need to be consistent in the value creation chain. That is, you cannot start from unsmob (which may return null or not which is also used as a type check) but would need to start with a different function delivering then either a reference or the kind of null-checked pointer you now suggest. Every further use must then retain this particular type, not allowing for a piecemeal conversion of the code conventions. The latter would at least have the advantage of somewhat definable semantics (like implicit conversion to pointer) making for a somewhat softer conversion and giving somewhat more dependable semantics than just replacing pointers by references. It still has the disadvantage of adding a new class as baggage, making it harder for newcomers interpreting code. In particular the necessity of overloading *, &, and -> operators raises the amount of knowledge required for maintenance and debugging. I am rather doubtful that this would be a good tradeoff so I would not want to encourage you to indulge in a significant amount of work here which I may not want to see added to the code base after all. https://codereview.appspot.com/341150043/ _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel