TYPE_NEEDS_CONSTRUCTING zero for std::string?
Martin Sebor
msebor@gmail.com
Fri Oct 1 22:29:39 GMT 2021
On 10/1/21 11:44 AM, Florian Weimer wrote:
> * Martin Sebor via Gcc:
>
>> I'd expect TYPE_NEEDS_CONSTRUCTING to be non-zero in the middle end
>> for any C++ type with a user-defined ctor, but in some of my testing
>> I see it's actually zero for std::string, at least in some instances
>> (but nonzero for other types with ctors). Is there something special
>> about std::string that makes it so? (If this is intentional, how can
>> I create my own type that has a user-defined ctor and also a zero
>> TYPE_NEEDS_CONSTRUCTING?)
>
> I assume by writing an explicit default constructor:
>
> T() = default;
Yes, but in a class that also defines (non-defaulted) ctors
TYPE_NEEDS_CONSTRUCTING() is nonzero.
I'm looking for a type that defines a ctor (the above just declares
one) that has a zero for TYPE_NEEDS_CONSTRUCTING(T). GCC documents
the macro as:
/* Indicates that objects of this type must be initialized by calling a
function when they are created. */
So assuming TYPE_NEEDS_CONSTRUCTING(std::string) is supposed to return
zero (i.e., it's not a bug or some oddity I'm seeing) I want to know
how to define a class like it, with one or more user-defined ctors,
for which TYPE_NEEDS_CONSTRUCTING() also returns zero. Otherwise,
if it's a bug, I'll see if I can come up with a test case for it.
Martin
More information about the Gcc
mailing list