Index: clang-tidy/readability/RedundantDeclarationCheck.cpp =================================================================== --- clang-tidy/readability/RedundantDeclarationCheck.cpp +++ clang-tidy/readability/RedundantDeclarationCheck.cpp @@ -44,6 +44,10 @@ if (VD->getPreviousDecl()->getStorageClass() == SC_Extern && VD->getStorageClass() != SC_Extern) return; + // Don't warn about static member definition. + if (const DeclContext *DC = Prev->getLexicalDeclContext()) + if (DC->getRedeclContext()->isRecord()) + return; // Is this a multivariable declaration? for (const auto Other : VD->getDeclContext()->decls()) { if (Other != D && Other->getLocStart() == VD->getLocStart()) { Index: test/clang-tidy/readability-redundant-declaration.cpp =================================================================== --- test/clang-tidy/readability-redundant-declaration.cpp +++ test/clang-tidy/readability-redundant-declaration.cpp @@ -24,7 +24,13 @@ // Original check crashed for the code below. namespace std { - typedef decltype(sizeof(0)) size_t; +typedef decltype(sizeof(0)) size_t; } -void* operator new(std::size_t) __attribute__((__externally_visible__)); -void* operator new[](std::size_t) __attribute__((__externally_visible__)); +void *operator new(std::size_t) __attribute__((__externally_visible__)); +void *operator new[](std::size_t) __attribute__((__externally_visible__)); + +// Don't warn about static member definition. +struct C { + static int I; +}; +int C::I;