Issue Details (XML | Word | Printable)

Key: STDCXX-617
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Minor Minor
Assignee: Travis Vitek
Reporter: Martin Sebor
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
C++ Standard Library

[Intel C++ 10.0] error on implicit assignment in 26.valarray.transcend.stdcxx-315.cp

Created: 24/Oct/07 08:33 PM   Updated: 21/Nov/07 10:16 PM
Return to search
Component/s: Tests
Affects Version/s: 4.2.0
Fix Version/s: 4.2.1

Time Tracking:
Not Specified

Environment: Intel C++ 10.0/Linux

Patch Info: Patch Available
Severity: Compiler Error
Resolution Date: 21/Nov/07 10:16 PM


 Description  « Hide
Copied from http://www.nabble.com/Re%3A--VOTE--release-stdcxx-4.2.0-%28candidate-7%29-p13372451.html:

...I tried Intel 10.0 and found another test that gave a compiler error. I didn't investigate it in great detail but it looks like a problem
in the test rather than a compiler bug.

/home/mbrown/stdcxx-4.2.0/tests/regress/26.valarray.transcend.stdcxx-315.cpp(43): error: implicitly generated assignment operator cannot copy:
const member "S::self"
struct S {
^
detected during:
implicit generation of "S &S::operator=(const S &)" at line 1033 of "/home/mbrown/stdcxx-4.2.0/include/valarray"
instantiation of "std::valarray<_TypeT> std::abs(const std::valarray<_TypeT> &) [with _TypeT=S]" at line 78



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Travis Vitek added a comment - 29/Oct/07 09:56 PM - edited
According to 12.8 p9, a user-declared copy assignment operator X::operator=() is a non-static non-template member function of class X with exactly one parameter of type X, X& const X&, volatile X& or const volatile X&. The compiler is not supposed to declare or define an implicit copy assignment operator if such a user-declared operator exists. The Intel 10.0.025 compiler does not appear to consider 'X::operator=() const', and later fails to generate a copy constructor.

2007-10-29 Travis Vitek <vitek@roguewave.com>

STDCXX-617

  • 26.valarray.transcend.stdcxx-315.cpp: Work around
    bug in Intel C++ 10.0.025 that does not consider const copy-
    assignment operator before attempting to generate one.

Index: 26.valarray.transcend.stdcxx-315.cpp
===================================================================
— 26.valarray.transcend.stdcxx-315.cpp (revision 589749)
+++ 26.valarray.transcend.stdcxx-315.cpp (working copy)
@@ -48,7 +48,7 @@
~S () { pass = pass && this == self; }
operator double () const { pass = pass && this == self; return 1.0; }

  • void operator=(const S &s) const {
    + void operator=(const S &s) { pass = pass && &s == s.self && this == self; }
    S operator- () const { pass = pass && this == self; return *this; }


Martin Sebor added a comment - 21/Nov/07 10:16 PM
Nightly build results with Intel C++ 10.0 look good. Confirmed as fixed. Closing.