Date: Wed, 8 May 2024 09:44:28 +0200
If the construct automatically always leads to stack overflow errors, one could - as a third option - disallow it altogether.
Something like a default copy constructor may not be called from a derived class with a parameter passed by value.
So the programmer would have to solve it explicitly. This would be the better alternative than to make a surprising special case.
Can the compiler detect those cases at least most of the time?
-----Ursprüngliche Nachricht-----
Von:David wang via Std-Proposals <std-proposals_at_[hidden]>
Gesendet:Mi 08.05.2024 08:05
Betreff:[std-proposals] Pass derived object by reference to single parameter delegated templated constructors
An:C++ <std-proposals_at_[hidden]>;
CC:David wang <wangjufan_at_[hidden]>;
On Tue, 7 May 2024 10:36:25 +0200 Sebastian Wittmeier wrote:
>So in your case, you want to have a reference type deduced (by template argument deduction),
>but currently [expr.type]/1 disagrees (https://timsong-cpp.github.io/cppwp/expr.type#1): >If an expression initially has the type ?reference to T? ([dcl.ref], [dcl.init.ref]), the type is >adjusted to T prior to any further analysis.
>The copy constructor is something special (compared to other constructors).
>Why do you want to handle it by a template
>in the first place?
Yes, I want to have a reference type deduced, but not through the template parameter deduction mechanism PR87332. The template parameter deduction mechanism leads to T, not T&. "template <typename T> base(T x) {}" prevents the compiler from calling the default copy constructor.
There are two ways to prevent it: modifying function matching rules which seems to confuse the users and breaks existing rules or passing derived objects by reference which is easy to implement and test but violates [expr.type]/1. But this violation is just a special case.
Handling it by a template may be the user's choice which is provided by C++. Although users use it correctly, it still leads to bugs.
--
Std-Proposals mailing list
Std-Proposals_at_[hidden]
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
Received on 2024-05-08 07:44:31