That's just an infinite recursion. Like this:
  int f(int x) {
    return f(x-1);
  }
Sure, sometimes you write an infinite recursion by accident. But that's no reason to ban all recursion from the language. Just don't do that, then.

–Arthur

On Mon, May 13, 2024 at 10:36 AM David wang via Std-Proposals <std-proposals@lists.isocpp.org> wrote:
Hi everyone.

In C++, we can pass an object of the same type by value to the constructor of the class, which results in a copy of the same type or its subtype being required. 
    
The sequence of constructor calls can be greatly optimized by disabling copying of the same type or its subtypes before constructing  an object. I'm confused why C++ doesn't disable it.
    
That is, when we are going to do something(constructing an object via some constructor), the prerequisite is that we need to do something of the same kind. For example,  the derived(int i, derived that) and template <typename T> base(T x) in the code snippet below.

struct base {

  base() {}

  template <typename T> base(T x) {}

};

struct derived : public base {

  derived(){}

  derived(int i, derived that): base(that) {}

  derived(derived& that): base(that) {}

};

int main() {

  derived d1;

  derived d2(d1);

  return 0;

}


--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals