struct Foo {
    Foo(Foo && from) { }
    Foo() { }
    ~Foo() { }
/*private:
    Foo(const Foo & from) { }*/
};
Foo CreateFoo(bool b) {
  Foo f;
  if (b) return Foo();
  return f;
}
int main () {
    Foo f(CreateFoo(false));
}

The problem might also be a spurious destructor call. The symptom is that the
constructor without parameters is called once, the move constructor never and
the destructor twice. With the traditional copy constructor included, the
programme works as intended, with one additional move constructor call, but no
copy constructor calls. Without the "if (b) return Foo();" line the programme
also works.

I've tested with these builds and -std=gnu++0x:
g++-4.3 (Debian 4.3.2-1.1) 4.3.2
g++ (Debian 20090129-1) 4.4.0 20090129 (experimental) [trunk revision 143770]


-- 
           Summary: Missing "move" constructor call (C++0x rvalue
                    references)
           Product: gcc
           Version: 4.3.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: gbrammer at gmx dot de
 GCC build triplet: x86_64-linux-gnu
  GCC host triplet: x86_64-linux-gnu
GCC target triplet: x86_64-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39126

Reply via email to