Modify

Ticket #6578 (closed Feature Requests: fixed)

Opened 4 years ago

Last modified 5 months ago

Update noncopyable for C++11

Reported by: dlwalker Owned by: viboes
Milestone: Boost 1.58.0 Component: utility
Version: Boost Development Trunk Severity: Optimization
Keywords: noncopyable Cc:

Description

Here's a quick update to boost::noncopyable for C++11, which has added enough primitives to express the concept directly. I tried it out with a copy of GCC 4.6, and have included the patch (with "svn diff --git").

Attachments

noncopyable_cpp11.git.2.diff Download (3.1 KB) - added by dlwalker 4 years ago.
Changes for updating noncopyable for Cxx11

Change History

Changed 4 years ago by dlwalker

Changes for updating noncopyable for Cxx11

comment:1 Changed 3 years ago by viboes

  • Owner changed from no-maintainer to viboes
  • Status changed from new to assigned

comment:2 Changed 2 years ago by viboes

  • Milestone changed from Boost 1.50.0 to Boost 1.54.0

Committed revision [83833].

comment:3 Changed 2 years ago by viboes

  • Status changed from assigned to closed
  • Resolution set to fixed

(In [83869]) utility/noncopyable : fix #6578.

comment:4 Changed 22 months ago by ramey

  • Status changed from closed to reopened
  • Resolution fixed deleted

Vicente,

I'm having a problem with this patch. My gcc 4.53 compiler gives the error message:

"noncopayable:: declared with non-public access cannot be defaulted in the class body"

Which seems to make some sense to me. My copy of the standard (section 8.4.2) says "If it[the function] is explicitly defaulted on its first declaration, — it shall be public," As usual the standard text is somewhat convoluted, but that what it says to me. I'm not sure why the test passes. The macro name (BOOST_NO_DEFAULTED_FUNCTIONS used to condition this code has been marked as deprecated in favor of a new one (BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) i don't know if that might be related.

Robert Ramey

comment:5 Changed 22 months ago by viboes

I have no access to gcc-4.5.3. Please could you move to the public section and see how it works?

comment:6 Changed 5 months ago by viboes

  • Status changed from reopened to closed
  • Resolution set to fixed
  • Milestone changed from Boost 1.54.0 to Boost 1.58.0

It seems the new code fixes this issue.

  class noncopyable
  {
  protected:
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS)
      BOOST_CONSTEXPR noncopyable() = default;
      ~noncopyable() = default;
#else
      noncopyable() {}
      ~noncopyable() {}
#endif
#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
      noncopyable( const noncopyable& ) = delete;
      noncopyable& operator=( const noncopyable& ) = delete;
#else
  private:  // emphasize the following members are private
      noncopyable( const noncopyable& );
      noncopyable& operator=( const noncopyable& );
#endif
  };
View

Add a comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
The resolution will be deleted. Next status will be 'reopened'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.