Index: clang-tidy/misc/DefinitionsInHeadersCheck.cpp =================================================================== --- clang-tidy/misc/DefinitionsInHeadersCheck.cpp +++ clang-tidy/misc/DefinitionsInHeadersCheck.cpp @@ -139,6 +139,9 @@ // Ignore variable definition within function scope. if (VD->hasLocalStorage() || VD->isStaticLocal()) return; + // Ignore inline variables. + if (VD->isInline()) + return; diag(VD->getLocation(), "variable %0 defined in a header file; " Index: docs/clang-tidy/checks/misc-definitions-in-headers.rst =================================================================== --- docs/clang-tidy/checks/misc-definitions-in-headers.rst +++ docs/clang-tidy/checks/misc-definitions-in-headers.rst @@ -74,6 +74,14 @@ template void B::f1() {} + class CE { + constexpr static int i = 5; // OK: inline variable definition. + }; + + inline int i = 5; // OK: inline variable definition. + + constexpr int k = 1; // OK: constexpr variable has internal linkage. + Options ------- Index: test/clang-tidy/misc-definitions-in-headers-1z.hpp =================================================================== --- /dev/null +++ test/clang-tidy/misc-definitions-in-headers-1z.hpp @@ -0,0 +1,10 @@ +// RUN: %check_clang_tidy %s misc-definitions-in-headers %t -- -- -std=c++1z + +class CE { + constexpr static int i = 5; // OK: inline variable definition. +}; + +inline int i = 5; // OK: inline variable definition. + +int b = 1; +// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: variable 'b' defined in a header file; variable definitions in header files can lead to ODR violations [misc-definitions-in-headers] Index: test/clang-tidy/misc-definitions-in-headers.hpp =================================================================== --- test/clang-tidy/misc-definitions-in-headers.hpp +++ test/clang-tidy/misc-definitions-in-headers.hpp @@ -1,4 +1,4 @@ -// RUN: %check_clang_tidy %s misc-definitions-in-headers %t +// RUN: %check_clang_tidy %s misc-definitions-in-headers %t -- -- -std=c++11 int f() { // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: function 'f' defined in a header file; function definitions in header files can lead to ODR violations [misc-definitions-in-headers] @@ -175,3 +175,5 @@ int CD::f() { // OK: partial template specialization. return 0; } + +constexpr int k = 1; // OK: constexpr variable has internal linkage.