1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MISSING_CTOR_DLLEXPORT_H_ 6 #define MISSING_CTOR_DLLEXPORT_H_ 7 8 struct MyString { 9 MyString(); 10 MyString(const MyString&); 11 MyString(MyString&&); 12 }; 13 14 template <class T> 15 struct MyVector { 16 MyVector(); 17 MyVector(const MyVector&); 18 MyVector(MyVector&&); 19 }; 20 21 // For now, this should only warn on the missing constructor, not on the missing 22 // copy and move constructors on dllexported classes. 23 class __declspec(dllexport) MissingCtorsArentOKInHeader { 24 public: 25 26 private: 27 MyVector<int> one_; 28 MyVector<MyString> two_; 29 }; 30 31 class __declspec(dllexport) InlineImplicitMoveCtorOK { 32 public: 33 InlineImplicitMoveCtorOK(); 34 35 private: 36 // ctor weight = 12, dtor weight = 9. 37 MyString one_; 38 MyString two_; 39 MyString three_; 40 int four_; 41 int five_; 42 int six_; 43 }; 44 45 class __declspec(dllexport) ExplicitlyDefaultedInlineAlsoWarns { 46 public: 47 ExplicitlyDefaultedInlineAlsoWarns() = default; 48 ~ExplicitlyDefaultedInlineAlsoWarns() = default; 49 ExplicitlyDefaultedInlineAlsoWarns( 50 const ExplicitlyDefaultedInlineAlsoWarns&) = default; 51 ExplicitlyDefaultedInlineAlsoWarns(ExplicitlyDefaultedInlineAlsoWarns&&) = 52 default; 53 54 private: 55 MyVector<int> one_; 56 MyVector<MyString> two_; 57 58 }; 59 60 #endif // MISSING_CTOR_DLLEXPORT_H_ 61