I see, the problem seems to come from 8.5.3/5...
1. I'm curious about why the compiler should want to make a copy of an
rvalue and bind a const reference to it instead of binding the const
reference directly to the rvalue. Can anyone explain this?
2. Why I need a copy ctor taking a non-const reference?
Because I'm trying to create a type (e.g. class) that describes a
resource wrapper. The resource is a non-copyable one (it can be
duplicated, but one should avoid doing so for performance reasons).
Examples of such resources are: Windows HANDLE's, HKEY's, HMODULE's,
HINTERNET's, MPI communicators and datatypes, and last but not least -
huge amounts of dynamically allocated memory. I need to use the type
that describes the resource wrapper (let's name it RW) in expressions
such as:
RW a = CreateRW( ); // 1: create a wrapper around a mutable
resource;
RW const a = CreateRW( ); // 2: create a wrapper around a
non-mutable resource;
a = b + c + d; // 3: use wrappers in arithmetic expressions, just
like built-in types; all identifiers here stand for objects of type RW
or const RW;
CreateRW( ) = a; // 4: disallow assignment to rvalues and
tem****aries - it is pointless;
Is it possible to create a type (or two - one for const wrappers, and
one for non-const ones) that meets all 4 requirements? If so, how?
[ See http://www.gotw.ca/resources/clcm.htm
for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]


|