1 // Copyright (c) 2012 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 #include "virtual_bodies.h" 6 7 // Shouldn't warn about method usage in the implementation file. 8 class VirtualMethodsInImplementation { 9 public: 10 virtual void MethodIsAbstract() = 0; 11 virtual void MethodHasNoArguments(); 12 virtual void MethodHasEmptyDefaultImpl() {} 13 virtual bool ComplainAboutThis() { return true; } 14 }; 15 16 // Stubs to fill in the abstract method 17 class ConcreteVirtualMethodsInHeaders : public VirtualMethodsInHeaders { 18 public: 19 void MethodIsAbstract() override {} 20 }; 21 22 class ConcreteVirtualMethodsInImplementation 23 : public VirtualMethodsInImplementation { 24 public: 25 void MethodIsAbstract() override {} 26 }; 27 28 // Fill in the implementations 29 void VirtualMethodsInHeaders::MethodHasNoArguments() { 30 } 31 void WarnOnMissingVirtual::MethodHasNoArguments() { 32 } 33 void VirtualMethodsInImplementation::MethodHasNoArguments() { 34 } 35 36 int main() { 37 ConcreteVirtualMethodsInHeaders one; 38 ConcreteVirtualMethodsInImplementation two; 39 } 40