Re: Pass by const-reference, temporaries and copyability
On Jul 29, 7:58 pm, Mathias Gaunard <loufo...@gmail.com> wrote:
From what I remember from the standard, passing a temporary to a
function taking a const-reference requires being able to copy that
temporary.
GCC 4.2 does confirm it with the following code:
struct Foo
{
Foo() {}
private:
Foo(const Foo&);
};
void test(const Foo&) {}
int main()
{
test(Foo());
}
I get the error that Foo(const Foo&) is not accessible.
It seems however that GCC 4.3 changed that behaviour: the code
compiles successfully, even in standard compliant pedantic mode with
all warnings.
While I do like the new behaviour much better (there is really no need
to be able to copy there, and it's just an annoyance that makes
handling of non-copyable types difficult) I think it is incorrect.
Is my memory of the standard incorrect, or was it changed? What does C+
+0x have to say about this? I suppose rvalue references do not require
copyability, so passing by const-rvalue-reference could be a better
idiom.
The resolution of core issue 391 changes the rules to permit this. The
resolution technically only applies to C++0x, but GCC often implements
DR resolutions even before they officially become part of the standard
(see http://gcc.gnu.org/bugs.html).
Yechezkel Mett
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]