IBM Support

LI77626: INVALID INCOMPLETE CLASS ERROR

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • Consider the following testcase:
    
    $cat test.cpp
    #include <iostream>
    
    class T
    {
    public:
        class D
        {
        public:
            const static int size = 0;
        };
    
        template<typename minus_1, bool flag>
        class N
        {
        public:
            const static int size = minus_1::size + 1;
        };
    };
    
    int main()
    {
        typedef T::N<T::N<T::D,0>, 0> MyExample;
    
        std::cout << "MyExample::size = " << MyExample::size <<
    "\n";
    
        return 0;
    }
    
    The compiler incorrectly issues error message:
    
    "test.cpp", line 16.33: 1540-0062 (S) The incomplete class
    "N<T::D,0>" must not be used as a qualifier.
    

Local fix

  • Define the static member outside as in the example below:
    
    $cat test.cpp
    struct T
    {
        struct D
        {
            const static int size = 0;
        };
    
        template<typename minus_1, bool flag> struct N
        {
            const static int size;
        };
    };
    
    template <typename X, bool Y>
    const int T::N<X,Y>::size = X::size+1;
    
    int main()
    {
        typedef T::N<T::N< T::D, 0>, 0> MyExample;
        int a = MyExample::size;
        return 0;
    }
    

Problem summary

  • PROBLEM DESCRIPTION: incomplete class error issued for member
    template
    
    USERS AFFECTED: An initializer for a static const member of a
    member template requires an instantiation of the same template.
      The compiler was processing the initializer before the
    instantiation, but the initializer requires the instantiation.
     The result was an incomplete class error for a missing
    instantiation.
    

Problem conclusion

  • Problem is fixed. The missing instantiation is completed before
    processing the initializer.
    

Temporary fix

Comments

APAR Information

  • APAR number

    LI77626

  • Reported component name

    XL C/C++ FOR LI

  • Reported component ID

    5725C7300

  • Reported release

    C10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2013-10-28

  • Closed date

    2013-10-28

  • Last modified date

    2013-10-28

  • APAR is sysrouted FROM one or more of the following:

    LI77283

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    XL C/C++ FOR LI

  • Fixed component ID

    5725C7300

Applicable component levels

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSXVZZ","label":"XL C\/C++ for Linux"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"12.1","Line of Business":{"code":"LOB57","label":"Power"}}]

Document Information

Modified date:
14 October 2021