Skip to main content

LI77073: INCORRECT VIRTUAL TEMPLATE ERROR


Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • The compiler generates an incorrect virtual template error
    message for the test case mentioned below:
    
    $cat test.cpp
    namespace sc{
    
    template <class T>
    class  Ref {};
    }
    
    
    namespace sc {
    
    
      struct DistArray4Dimensions {
        public:
          static const DistArray4Dimensions& default_dim() { return
    default_dim_; }
    
        private:
          static DistArray4Dimensions default_dim_;
    
      };
    
    
    class DistArray4 {
      public:
        virtual Ref<DistArray4> clone(const DistArray4Dimensions&
    dim = DistArray4Dimensions::default_dim()) =0;
    };
    
    
    }
    
    namespace sc {
    
    class DistArray4_MPIIOFile: public DistArray4 {
    
      protected:
        template <typename Derived> Ref<DistArray4> clone(const
    DistArray4Dimensions& dim =
    
    DistArray4Dimensions::default_dim());
    };
    }
    $
    
    
    ===== ACTUAL OUTPUT:
    $bgxlC -qarch=450d -qtune=450  -c test.cpp
    "test.cpp", line 34.49: 1540-1158 (S) The function template
    "sc::DistArray4_MPIIOFile::clone" must not be declared as
    virtual.
    $
    
    ===== EXPECTED OUTPUT:
    Should compile clean.
    

Local fix

  • n/a
    

Problem summary

  • USERS AFFECTED:
    Users with member function templates which have the same name
    and parameter list as a base class virtual function are
    affected by this issue.
    
    PROBLEM DESCRIPTION:
    A template function which otherwise has the same name and
    parameter list
    as a base class virtual function may be incorrectly rejected
    with a message
    indicating that the template function may not be declared
    virtual.
    
    struct A {
    virtual void foo();
    };
    
    struct B : A {
    template <typename T>
    void foo();  // error message produced for this line
    };
    
    The function is actually not declared virtual; however, it was
    mistakenly
    considered to override the base class virtual function.
    
    Specializations of member template functions should never be
    considered to
    override members of a base class.
    

Problem conclusion

  • A check was implemented to recognize that member function
    templates never override virtual functions.
    

Temporary fix

Comments

APAR Information

  • APAR number

    LI77073

  • Reported component name

    XL C/C++ FOR BG

  • Reported component ID

    5799AG100

  • Reported release

    C10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2012-11-23

  • Closed date

    2012-11-23

  • Last modified date

    2012-11-23

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

    LI76710

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

Fix information

  • Fixed component name

    XL C/C++ FOR BG

  • Fixed component ID

    5799AG100

Applicable component levels

Rate this page:

(0 users)Average rating

Copyright and trademark information

IBM, the IBM logo and ibm.com are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at www.ibm.com/legal/copytrade.shtml.

Rate this page:


(0 users)Average rating

Add comments

Document information

XL C/C++ for Blue Gene/Q

Compiler


Software version:
12.1


Reference #:
LI77073


Modified date:
2012-11-23

Translate my page

Content navigation