IV44274: 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

    IV44274

  • Reported component name

    XL C/C++ FOR AI

  • Reported component ID

    5725C7200

  • Reported release

    C10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2013-06-17

  • Closed date

    2013-06-17

  • Last modified date

    2013-06-17

  • 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 AI

  • Fixed component ID

    5725C7200

Applicable component levels

  • RC10 PSY U860073

       UP C



Rate this page:

(0 users)Average rating

Add comments

Document information


More support for:

XL C/C++ for AIX
Compiler

Software version:

12.1

Reference #:

IV44274

Modified date:

2013-06-17

Translate my page

Machine Translation

Content navigation