Delete LLVM_DELETED_FUNCTION from coding standards

It didn't seem worth leaving behind a guideline to use '= delete' to
make a class uncopyable. That's a well known C++ design pattern.

Reported on the mailing list and in PR22724.

llvm-svn: 230776
This commit is contained in:
Reid Kleckner 2015-02-27 18:34:16 +00:00
parent 32875af6e3
commit 27f79d7986

View File

@ -1301,34 +1301,6 @@ that the enum expression may take any representable value, not just those of
individual enumerators. To suppress this warning, use ``llvm_unreachable`` after
the switch.
Use ``LLVM_DELETED_FUNCTION`` to mark uncallable methods
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Prior to C++11, a common pattern to make a class uncopyable was to declare an
unimplemented copy constructor and copy assignment operator and make them
private. This would give a compiler error for accessing a private method or a
linker error because it wasn't implemented.
With C++11, we can mark methods that won't be implemented with ``= delete``.
This will trigger a much better error message and tell the compiler that the
method will never be implemented. This enables other checks like
``-Wunused-private-field`` to run correctly on classes that contain these
methods.
For compatibility with MSVC, ``LLVM_DELETED_FUNCTION`` should be used which
will expand to ``= delete`` on compilers that support it. These methods should
still be declared private. Example of the uncopyable pattern:
.. code-block:: c++
class DontCopy {
private:
DontCopy(const DontCopy&) LLVM_DELETED_FUNCTION;
DontCopy &operator =(const DontCopy&) LLVM_DELETED_FUNCTION;
public:
...
};
Don't evaluate ``end()`` every time through a loop
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^