Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Clarification Rule 0.2.1
#1
Hi,

I have a question regarding rule 0.2.1 on the following code:
Code:
namespace {

struct Base {
  Base() {
    // do resource management
  }
};

struct Derived : public Base {
  // has implicit default constructor that calls user-provided Base()
};

Base b; // (1) compliant
Derived d; // (2) compliant or non-compliant for rule 0.2.1 ?

}

Case (1) is clearly compliant as b has class type Base and Base has a user-provided constructor.
Case (2) is unclear, as the default constructor of Derived is not user-provided, if I understand the C++ standard correctly, as the user does not declare it at all.
Still case (2) seems fine and in line with the rule's rationale.

It would be great to get a clarification whether case (2) is considered compliant or not, and if compliant, what the intended definition of "use" should be.
Thanks a lot!
Reply
#2
You're right, the intent of 0.2.1 was that 'd' in you example should be compliant, but a strict reading of the rule says its not.

The problem is the last paragraph in the rule:  "The variable is of class type and has a user-provided constructor or a user-provided destructor.".  The two occurrences of  'user-provided'  should be  'non-trivial'.  This has been noted for future revision.

In the short term, you can either deviate or provide an explicit constructor for Devired.
Posted by and on behalf of
the MISRA C++ Working Group
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)