In file included from overridden_methods.cpp:5:
./overridden_methods.h:48:28: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeMethod();
                           ^
                            override
./overridden_methods.h:52:34: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeInlineMethod() {}
                                 ^
                                  override
./overridden_methods.h:56:39: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeConstMethod() const {}
                                      ^
                                       override
./overridden_methods.h:58:55: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeMethodWithExceptionSpec() throw() {}
                                                      ^
                                                       override
./overridden_methods.h:61:69: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeConstMethodWithExceptionSpec() const throw(int) {}
                                                                    ^
                                                                     override
./overridden_methods.h:63:39: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeNonPureBaseMethod() {}
                                      ^
                                       override
./overridden_methods.h:65:39: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeMethodWithComment();  // This is a comment.
                                      ^
                                       override
./overridden_methods.h:67:46: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeMethodWithCommentAndBody() {}  // This is a comment.
                                             ^
                                              override
overridden_methods.cpp:24:28: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeMethod();
                           ^
                            override
overridden_methods.cpp:28:34: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeInlineMethod() {}
                                 ^
                                  override
overridden_methods.cpp:32:39: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeConstMethod() const {}
                                      ^
                                       override
overridden_methods.cpp:34:55: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeMethodWithExceptionSpec() throw() {}
                                                      ^
                                                       override
overridden_methods.cpp:37:69: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeConstMethodWithExceptionSpec() const throw(int) {}
                                                                    ^
                                                                     override
overridden_methods.cpp:39:39: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeNonPureBaseMethod() {}
                                      ^
                                       override
overridden_methods.cpp:41:39: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeMethodWithComment();  // This is a comment.
                                      ^
                                       override
overridden_methods.cpp:43:46: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'.
  virtual void SomeMethodWithCommentAndBody() {}  // This is a comment.
                                             ^
                                              override
16 warnings generated.
