Rule 0-1-3/0-1-4/0-1-5 and (template) class members

Moderators: david ward, misra cpp

Post Reply
grunwald
Posts: 12
Joined: Wed May 14, 2014 1:02 pm
Company: Axivion GmbH

Rule 0-1-3/0-1-4/0-1-5 and (template) class members

Post by grunwald » Wed Feb 01, 2017 6:11 pm

Do these rules apply to class members?

If so, do they apply to instances of template class members?

Code: Select all

template<typename T>
class C {
    T member1; // never used; compliant with 0-1-3?
    T member2; // C<int>::member2 is used but C<float>::member2 is not; compliant with 0-1-3?

    typedef T Unused; // typedef never used: non-compliant with 0-1-5.
    typedef T X; // C<int>::X is used but C<float>::X is not; compliant with 0-1-5?

    void call() { // only instantiated for C<int>
       use(static_cast<X>(member2));
    }
};

int main() {
  C<int>().call();
  C<float>();
}
The same question also applies to 0-1-4.

For 0-1-10 the situation is different, as class template member functions only get instantiated if they actually used. Thus C<float>::call() is compliant with 0-1-10. A completely unused class template member function would be non-compliant with Rule 14-7-1.

misra cpp
Posts: 145
Joined: Mon Jun 02, 2008 1:55 pm
Company: MISRA

Re: Rule 0-1-3/0-1-4/0-1-5 and (template) class members

Post by misra cpp » Mon Jul 10, 2017 10:47 am

The basic answer to all these queries is that every definition in the program must be used somewhere, or conversely, it should not be possible to remove a definition from the code and still have the program compile.

So for a template class, each member of the class must be used by at least one instantiation of the template.
Posted by and on behalf of
the MISRA C++ Working Group

Post Reply

Return to “6.0 Language independent issues (C++)”