On Friday, 28 June 2013 at 16:44:03 UTC, Ali Çehreli wrote:
Ali

P.S. The C++ program that I have just used for testing:

Are you sure that the code is exact translation of demonstrated D problem? I see difference in argument passing order and your version uses try-catch block.

This code

#include <iostream>
#include <stdexcept>

using namespace std;

int callme()
{
    throw runtime_error("");
    return 0;
}

struct S
{
    int i_;

    S(int i)
        :
        i_(i)
    {
        cout << "constructing: " << i_ << " at " << this << '\n';
    }

    S(const S & that)
    {
        cout << "copying: " << that.i_ << " to " << this << '\n';
        i_ = that.i_;
    }

    ~S()
    {
        cout << "destroying: " << i_ << " at " << this << '\n';
    }
};

void foo(S s, int i)
{
   s.i_ = 2;
}

int main()
{
    S s = S(1);
    foo(s, callme());

}

prints for me:

constructing: 1 at 0x7fffb93078d0
terminate called after throwing an instance of 'std::runtime_error'
  what():
Aborted

Reply via email to