// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MISSING_CTOR_H_ #define MISSING_CTOR_H_ struct MyString { MyString(); ~MyString(); MyString(const MyString&); MyString(MyString&&); }; template <class T> struct MyVector { MyVector(); ~MyVector(); MyVector(const MyVector&); MyVector(MyVector&&); }; // Note: this should warn for an implicit copy constructor too, but currently // doesn't, due to a plugin bug. class MissingCtorsArentOKInHeader { public: private: MyVector<int> one_; MyVector<MyString> two_; }; // Inline move ctors shouldn't be warned about. Similar to the previous test // case, this also incorrectly fails to warn for the implicit copy ctor. class InlineImplicitMoveCtorOK { public: InlineImplicitMoveCtorOK(); private: // ctor weight = 12, dtor weight = 9. MyString one_; MyString two_; MyString three_; int four_; int five_; int six_; }; class ExplicitlyDefaultedInlineAlsoWarns { public: ExplicitlyDefaultedInlineAlsoWarns() = default; ~ExplicitlyDefaultedInlineAlsoWarns() = default; ExplicitlyDefaultedInlineAlsoWarns( const ExplicitlyDefaultedInlineAlsoWarns&) = default; private: MyVector<int> one_; MyVector<MyString> two_; }; union UnionDoesNotWarn { UnionDoesNotWarn() = default; UnionDoesNotWarn(const UnionDoesNotWarn& other) = default; int a; int b; int c; int d; int e; int f; int g; int h; int i; int j; int k; int l; int m; int n; int o; int p; int q; int r; int s; int t; int u; int v; int w; int x; int y; int z; }; #endif // MISSING_CTOR_H_