1377. The revised forward is not compatible with access-control

Section: 23.2 [utility] Status: Resolved Submitter: INCITS Opened: 2010-08-25 Last modified: 2016-02-10

Priority: Not Prioritized

View all other issues in [utility].

View all issues with Resolved status.

Discussion:

Addresses US-90

In n3090, at variance with previous iterations of the idea discussed in papers and incorporated in WDs, std::forward is constrained via std::is_convertible, thus is not robust wrt access control. This causes problems in normal uses as implementation detail of member functions. For example, the following snippet leads to a compile time failure, whereas that was not the case for an implementation along the lines of n2835 (using enable_ifs instead of concepts for the constraining, of course)

#include <utility>
struct Base { Base(Base&&); };

struct Derived
  : private Base
{
  Derived(Derived&& d)
    : Base(std::forward<Base>(d)) { }
};

In other terms, LWG 1054 can be resolved in a better way, the present status is not acceptable.

[ 2010-10-24 Daniel adds: ]

Accepting n3143 would solve this issue.

Proposed resolution:

Resolved as NAD Editorial by paper n3143.