1eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// Copyright (c) 2008, Google Inc.
2eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// All rights reserved.
3eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai//
4eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// Redistribution and use in source and binary forms, with or without
5eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// modification, are permitted provided that the following conditions are
6eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// met:
7eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai//
8eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai//     * Redistributions of source code must retain the above copyright
9eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// notice, this list of conditions and the following disclaimer.
10eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai//     * Redistributions in binary form must reproduce the above
11eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// copyright notice, this list of conditions and the following disclaimer
12eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// in the documentation and/or other materials provided with the
13eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// distribution.
14eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai//     * Neither the name of Google Inc. nor the names of its
15eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// contributors may be used to endorse or promote products derived from
16eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// this software without specific prior written permission.
17eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai//
18eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai
30a91e414f841dedc96efcae583f2fee6067fc637ferikwright@chromium.org#include "client/windows/tests/crash_generation_app/abstract_class.h"
31eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai
32eeca9921c563d802cccc5593bf55dcb7683e7250mmentovainamespace google_breakpad {
33eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai
34eeca9921c563d802cccc5593bf55dcb7683e7250mmentovaiBase::Base(Derived* derived)
35eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai    : derived_(derived) {
36eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai}
37eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai
38eeca9921c563d802cccc5593bf55dcb7683e7250mmentovaiBase::~Base() {
39eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai  derived_->DoSomething();
40eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai}
41eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai
42eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai#pragma warning(push)
43eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai#pragma warning(disable:4355)
44eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai// Disable warning C4355: 'this' : used in base member initializer list.
45eeca9921c563d802cccc5593bf55dcb7683e7250mmentovaiDerived::Derived()
46eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai    : Base(this) {  // C4355
47eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai}
48eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai#pragma warning(pop)
49eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai
50eeca9921c563d802cccc5593bf55dcb7683e7250mmentovaivoid Derived::DoSomething() {
51eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai}
52eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai
53eeca9921c563d802cccc5593bf55dcb7683e7250mmentovai}  // namespace google_breakpad
54