&gt; Do you consider D to be a derivative of C++? I don&#x27;t. They have a near perfect C++ interface. D can even catch C++ exceptions.<p>It&#x27;s not a near-perfect C++ interface, because D can&#x27;t instantiate C++ templates on its own.<p>&gt; First of all, C++ cannot be obsoleted by rust, it&#x27;s economically impossible.<p>Rust can make C++ obsolete in a technical sense. But I agree of course that C++ is immortal.<p>&gt; For example, it&#x27;s trivial to write a low overhead pointer that can&#x27;t dangle, throws an exception on nullptr deference, and that safely points to an object it doesn&#x27;t own (even if that object is its owner)<p>Wrong. You can&#x27;t write a pointer that can&#x27;t dangle in C++. Think iterator invalidation, &quot;this&quot; invalidation, etc. I&#x27;ve given innumerable code samples to prove this in the past.<p>It&#x27;s hard to argue about this abstractly, so let&#x27;s do this. If you give me the C++ code for a smart pointer that you claim is safe, I will construct you a code example showing use-after-free using that pointer.<p>&gt; From what I&#x27;ve observed, you can&#x27;t do this in Rust, if you try to write a doubly linked list you either have to use C-pointers that can dangle inside unsafe blocks, or eat the Rc overhead.<p>Yes, you can&#x27;t do this in Rust. You also can&#x27;t do it in C++.<p>C++ is good at making you <i>think</i> that you&#x27;re using pointers that can&#x27;t dangle, as evidenced by posts like yours. It&#x27;s not good at <i>actually</i> preventing things like use-after-free.<p>&gt; - template meta-programming feels like a different language, it&#x27;s dynamic, functional, and the difference is refreshing. I like the mental switch you have to do to go from writing a C++ template to writing a C++ model.<p>I much prefer the static approach of Rust&#x27;s generics to the untyped templates of C++--the fact that templates feel like a different language is a disadvantage in my view--but this is a huge tradeoff and it largely comes down to taste. This is unlike the memory safety guarantees of Rust pointers, which are <i>not</i> a matter of taste; safety is a formal property that C++ references simply do not satisfy and cannot satisfy no matter what.