diff options
author | Clement Courbet <courbet@google.com> | 2016-07-22 12:42:19 +0000 |
---|---|---|
committer | Clement Courbet <courbet@google.com> | 2016-07-22 12:42:19 +0000 |
commit | f67fbfaa8c627bfbc628adecd4eed80fd85100b4 (patch) | |
tree | 391ced0e52aa55a963cb8753d8defe44d642fdda /clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst | |
parent | a81f4728f370541c8fd51bbad29771fa3c152069 (diff) | |
download | bcm5719-llvm-f67fbfaa8c627bfbc628adecd4eed80fd85100b4.tar.gz bcm5719-llvm-f67fbfaa8c627bfbc628adecd4eed80fd85100b4.zip |
[clang-tidy] new cppcoreguidelines-slicing
Flags slicing of member variables or vtable. See:
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es63-dont-slice
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c145-access-polymorphic-objects-through-pointers-and-references
Differential revision:
http://reviews.llvm.org/D21974
llvm-svn: 276408
Diffstat (limited to 'clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst')
-rw-r--r-- | clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst new file mode 100644 index 00000000000..0b1bb6beed4 --- /dev/null +++ b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-slicing.rst @@ -0,0 +1,23 @@ +.. title:: clang-tidy - cppcoreguidelines-slicing + +cppcoreguidelines-slicing +========================= + +Flags slicing of member variables or vtable. Slicing happens when copying a +derived object into a base object: the members of the derived object (both +member variables and virtual member functions) will be discarded. +This can be misleading especially for member function slicing, for example: + +.. code:: c++ + + struct B { int a; virtual int f(); }; + struct D : B { int b; int f() override; }; + void use(B b) { // Missing reference, intended ? + b.f(); // Calls B::f. + } + D d; + use(d); // Slice. + +See the relevant CppCoreGuidelines sections for details: +https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es63-dont-slice +https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c145-access-polymorphic-objects-through-pointers-and-references |