IBM Support

LI77632: ERROR MESSAGE FOR EXPLICIT COPY CONSTRUCTOR

Subscribe

You can track all active APARs for this component.

APAR status

  • Closed as program error.

Error description

  • The following test case shows that for an unused copy
    constructor, making it explicit or private explicit fails the
    compilation with errors complaining the member is not a member
    of the class.
    
    $ xlC d31594910-test1-t.cpp  -o a1.t
    "d31594910-test1-t.cpp", line 12.26: 1540-0217 (S) "a" is not a
    member of "struct B".
    "d31594910-test1-t.cpp", line 12.5: 1540-0700 (I) The previous
    message was produced while processing "B::B(const B &)".
    "d31594910-test1-t.cpp", line 23.9: 1540-0700 (I) The previous
    message was produced while processing "main()".
    
    
    $cat d31594910-test1-t.cpp
    #include <iostream>
    
    struct A {
        int a;
        A(int v) : a(v) {}
    };
    
    struct B {
        const int b_;
    
        template <typename T>
        B(const T & t) : b_(t.a) {}
    
        explicit
        B(const B &b) : b_(b.b_) { std::cout << "from B(const B
    &b): " << b.b_ << std::endl; }
    };
    
    void foo( const B & b ) { std::cout << "from foo: " << b.b_ <<
    std::endl; }
    
    int main()
    {
        A a(5);
        foo(a);
    }
    

Local fix

  • Remove explicit keyword
    

Problem summary

  • PROBLEM DESCRIPTION: Explicit constructor candidate issue for
    initialization of second temporary from result of a
    user-defined conversion
    
    Explicit constructors are not considered candidates by the XL
    C/C++ compiler when performing the second standard conversion
    of a user-defined conversion. Since the initialization
    associated with the second standard conversion is a direct
    initialization, explicit constructors should be included in the
    set of candidates.
    
    USERS AFFECTED: Users of user defined conversions with a target
    type having explicit constructors callable with one argument.
    

Problem conclusion

  • Explicit constructors are now considered as candidates in the
    affected context.
    

Temporary fix

Comments

APAR Information

  • APAR number

    LI77632

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

    IV46067

  • 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



Document information

More support for: XL C/C++ for Linux
Compiler

Software version: 12.1

Reference #: LI77632

Modified date: 28 October 2013