mirror of
https://github.com/boostorg/config.git
synced 2025-07-29 20:07:17 +02:00
Added BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS, BOOST_DEFAULTED_FUNCTION and BOOST_DELETED_FUNCTION macros for portable declaration of defaulted and deleted functions.
[SVN r84798]
This commit is contained in:
@ -751,6 +751,61 @@ with:
|
||||
BOOST_STATIC_CONSTEXPR UIntType xor_mask = a;
|
||||
``
|
||||
]]
|
||||
[[`BOOST_DEFAULTED_FUNCTION(fun, body)`][
|
||||
This macro is intended to be used within a class definition in order to declare a default implementation of function `fun`.
|
||||
For the compilers that do not support C++11 defaulted functions the macro will expand into an inline function definition
|
||||
with the `body` implementation. For example:
|
||||
``
|
||||
struct my_struct
|
||||
{
|
||||
BOOST_DEFAULTED_FUNCTION(my_struct(), {})
|
||||
};
|
||||
``
|
||||
is equivalent to:
|
||||
``
|
||||
struct my_struct
|
||||
{
|
||||
my_struct() = default;
|
||||
};
|
||||
``
|
||||
or:
|
||||
``
|
||||
struct my_struct
|
||||
{
|
||||
my_struct() {}
|
||||
};
|
||||
``
|
||||
]]
|
||||
[[`BOOST_DELETED_FUNCTION(fun)`][
|
||||
This macro is intended to be used within a class definition in order to declare a deleted function `fun`.
|
||||
For the compilers that do not support C++11 deleted functions the macro will expand into a private function
|
||||
declaration with no definition. Since the macro may change the access mode, it is recommended to use this macro
|
||||
at the end of the class definition. For example:
|
||||
``
|
||||
struct noncopyable
|
||||
{
|
||||
BOOST_DELETED_FUNCTION(noncopyable(noncopyable const&))
|
||||
BOOST_DELETED_FUNCTION(noncopyable& operator= (noncopyable const&))
|
||||
};
|
||||
``
|
||||
is equivalent to:
|
||||
``
|
||||
struct noncopyable
|
||||
{
|
||||
noncopyable(noncopyable const&) = delete;
|
||||
noncopyable& operator= (noncopyable const&) = delete;
|
||||
};
|
||||
``
|
||||
or:
|
||||
``
|
||||
struct noncopyable
|
||||
{
|
||||
private:
|
||||
noncopyable(noncopyable const&);
|
||||
noncopyable& operator= (noncopyable const&);
|
||||
};
|
||||
``
|
||||
]]
|
||||
[[
|
||||
``
|
||||
BOOST_NOEXCEPT
|
||||
|
@ -217,6 +217,11 @@
|
||||
# define BOOST_NO_SFINAE_EXPR
|
||||
#endif
|
||||
|
||||
// GCC 4.5 forbids declaration of defaulted functions in private or protected sections
|
||||
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && (__GNUC__ == 4 && __GNUC_MINOR__ <= 5)
|
||||
# define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS
|
||||
#endif
|
||||
|
||||
// C++0x features in 4.5.0 and later
|
||||
//
|
||||
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||
|
@ -689,6 +689,36 @@ namespace std{ using ::type_info; }
|
||||
# define BOOST_ALIGNMENT(x)
|
||||
#endif
|
||||
|
||||
// Defaulted and deleted function declaration helpers
|
||||
// These macros are intended to be inside a class definition.
|
||||
// BOOST_DEFAULTED_FUNCTION accepts the function declaration and its
|
||||
// body, which will be used if the compiler doesn't support defaulted functions.
|
||||
// BOOST_DELETED_FUNCTION only accepts the function declaration. It
|
||||
// will expand to a private function declaration, if the compiler doesn't support
|
||||
// deleted functions. Because of this it is recommended to use BOOST_DELETED_FUNCTION
|
||||
// in the end of the class definition.
|
||||
//
|
||||
// class my_class
|
||||
// {
|
||||
// public:
|
||||
// // Default-constructible
|
||||
// BOOST_DEFAULTED_FUNCTION(my_class(), {})
|
||||
// // Copying prohibited
|
||||
// BOOST_DELETED_FUNCTION(my_class(my_class const&))
|
||||
// BOOST_DELETED_FUNCTION(my_class& operator= (my_class const&))
|
||||
// };
|
||||
//
|
||||
#if !(defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS))
|
||||
# define BOOST_DEFAULTED_FUNCTION(fun, body) fun = default;
|
||||
#else
|
||||
# define BOOST_DEFAULTED_FUNCTION(fun, body) fun body
|
||||
#endif
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
|
||||
# define BOOST_DELETED_FUNCTION(fun) fun = delete;
|
||||
#else
|
||||
# define BOOST_DELETED_FUNCTION(fun) private: fun;
|
||||
#endif
|
||||
|
||||
//
|
||||
// Set BOOST_NO_DECLTYPE_N3276 when BOOST_NO_DECLTYPE is defined
|
||||
|
Reference in New Issue
Block a user