//===----------------------------------------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

// <deque>

// void push_front(const value_type& x);

#include <deque>
#include <cassert>

// Flag that makes the copy constructor for CMyClass throw an exception
static bool gCopyConstructorShouldThow = false;


class CMyClass {
	public: CMyClass();
	public: CMyClass(const CMyClass& iOther);
	public: ~CMyClass();

	private: int fMagicValue;

	private: static int kStartedConstructionMagicValue;
	private: static int kFinishedConstructionMagicValue;
};

// Value for fMagicValue when the constructor has started running, but not yet finished
int CMyClass::kStartedConstructionMagicValue = 0;
// Value for fMagicValue when the constructor has finished running
int CMyClass::kFinishedConstructionMagicValue = 12345;

CMyClass::CMyClass() :
	fMagicValue(kStartedConstructionMagicValue)
{
	// Signal that the constructor has finished running
	fMagicValue = kFinishedConstructionMagicValue;
}

CMyClass::CMyClass(const CMyClass& /*iOther*/) :
	fMagicValue(kStartedConstructionMagicValue)
{
	// If requested, throw an exception _before_ setting fMagicValue to kFinishedConstructionMagicValue
	if (gCopyConstructorShouldThow) {
		throw std::exception();
	}
	// Signal that the constructor has finished running
	fMagicValue = kFinishedConstructionMagicValue;
}

CMyClass::~CMyClass() {
	// Only instances for which the constructor has finished running should be destructed
	assert(fMagicValue == kFinishedConstructionMagicValue);
}

int main()
{
	CMyClass instance;
	std::deque<CMyClass> vec;

	vec.push_front(instance);

	gCopyConstructorShouldThow = true;
	try {
		vec.push_front(instance);
	}
	catch (...) {
	}
}
