michael@0: // Copyright (c) 2012 The Chromium Authors. All rights reserved. michael@0: // Use of this source code is governed by a BSD-style license that can be michael@0: // found in the LICENSE file. michael@0: michael@0: #include "virtual_methods.h" michael@0: michael@0: // Shouldn't warn about method usage in the implementation file. michael@0: class VirtualMethodsInImplementation { michael@0: public: michael@0: virtual void MethodIsAbstract() = 0; michael@0: virtual void MethodHasNoArguments(); michael@0: virtual void MethodHasEmptyDefaultImpl() {} michael@0: virtual bool ComplainAboutThis() { return true; } michael@0: }; michael@0: michael@0: // Stubs to fill in the abstract method michael@0: class ConcreteVirtualMethodsInHeaders : public VirtualMethodsInHeaders { michael@0: public: michael@0: virtual void MethodIsAbstract() override {} michael@0: }; michael@0: michael@0: class ConcreteVirtualMethodsInImplementation michael@0: : public VirtualMethodsInImplementation { michael@0: public: michael@0: virtual void MethodIsAbstract() override {} michael@0: }; michael@0: michael@0: // Fill in the implementations michael@0: void VirtualMethodsInHeaders::MethodHasNoArguments() {} michael@0: void WarnOnMissingVirtual::MethodHasNoArguments() {} michael@0: void VirtualMethodsInImplementation::MethodHasNoArguments() {} michael@0: michael@0: int main() { michael@0: ConcreteVirtualMethodsInHeaders one; michael@0: ConcreteVirtualMethodsInImplementation two; michael@0: }