Title
POD-structs with template assignment operators
Status
open
Section
11.2 [class.prop]
Submitter
Alisdair Meredith

Created on 2005-03-19.00:00:00 last changed 239 months ago

Messages

Date: 2022-04-30.06:44:58

A POD-struct is not permitted to have a user-declared copy assignment operator (11.2 [class.prop] paragraph 1). However, a template assignment operator is not considered a copy assignment operator, even though its specializations can be selected by overload resolution for performing copy operations (11.4.6 [class.copy.assign] paragraph 12). Consequently, X in the following code is a POD, notwithstanding the fact that copy assignment (for a non-const operand) is a member function call rather than a bitwise copy:

    struct X {
      template<typename T> const X& operator=(T&);
    };
    void f() {
      X x1, x2;
      x1 = x2;  // calls X::operator=<X>(X&)
    }

Is this intentional?

History
Date User Action Args
2005-03-19 00:00:00admincreate