What are some examples of classes that you would mark explicit?  How would you make the design decision of whether to mark a class as explicit or not?  Or would you recommend marking all of your classes explicit?

On Tue, Nov 12, 2019 at 5:47 AM Steve Weinrich via Std-Proposals <std-proposals@lists.isocpp.org> wrote:

This is an idea that has been roaming around my head for some 20 years!

 

As we know, there is a list of some 15 (or so) operations (construction, assignment, copy, move, conversion, etc.) that the simple statement: “class T {};” defines.

 

If one wishes some control over this behavior, one has to be knowledgeable in all that the compiler provides.  In non-C++ terms, one has to say (modern use: =delete), “I don’t want that, I don’t want this, etc.”  The compiler provides no aid for this!

 

My notion is to reverse this via “explicit class T {};”.  While I am sure there are some details that would need to be debated, this would eliminate (most) everything that the compiler defines for you.  Thus, if you wanted something, you would have to define it or use “ = default” (yes, I am aware that would require extending “= default” to more items – seems OK to me).  The obvious advantage is that the compiler now provides some help, in that using something that is not defined will yield a compiler error.

 

Does anyone know if this has been proposed before?  If not, what do you think?

 

Thanks in advance!

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