Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Kazutoshi Satoda <k_satoda@f2.dion.ne.jp> |
|---|---|
| Newsgroups | comp.std.c++ |
| Subject | Contradicting definition of empty shared_ptr on shared_ptr(nullptr, d) |
| Date | 2012-06-23 13:13 -0700 |
| Organization | unknown |
| Message-ID | <4FE565B7.1070406@f2.dion.ne.jp> (permalink) |
20.7.2.2/1 (N3376) says: > > A shared_ptr object is empty if it does not own a pointer. Please note that it says "own a pointer". This definition was added as the resolution for LWG defect #813. 813. "empty" undefined for shared_ptr http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#813 20.7.2.2.1/9 says about the effect of shared_ptr(nullptr_t p, D d): > > Effects: Constructs a shared_ptr object that owns the object p and the > deleter d. Please note that it says "owns the object". This was intentionally changed from "the pointer" as a part of resolution for LWG defect #758, to cover nullptr_t case. 758. shared_ptr and nullptr http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#758 Since shared_ptr(nullptr, d) owns an object of type nullptr_t, but does not own a pointer, it is said as "empty" by a strict reading of the above definition. This causes a contradiction: 20.7.2.2.1/10 sets a postcondition use_count() == 1 on shared_ptr(nullptr, d). But 20.7.2.2.5/7 says the return value of use_count() is "0 when *this is empty". Proposed resolution: Replace the last 2 words in 20.7.2.2/1 ... empty if it does not own a pointer. to ... empty if it does not own an object. Besides that, I want to know if it is (or was) possible or not to define shared_ptr(nullptr) (including some variants with deleter and allocator) is empty. It seems to be less surprising. FYI, please see the following question on stackoverflow. http://stackoverflow.com/questions/11164354/does-the-standard-behavior-for-deleters-differ-between-shared-ptr-and-unique-ptr -- k_satoda [ comp.std.c++ is moderated. To submit articles, try posting with your ] [ newsreader. If that fails, use mailto:std-cpp-submit@vandevoorde.com ] [ --- Please see the FAQ before posting. --- ] [ FAQ: http://www.comeaucomputing.com/csc/faq.html ]
Back to comp.std.c++ | Previous | Next — Next in thread | Find similar
Contradicting definition of empty shared_ptr on shared_ptr(nullptr, d) Kazutoshi Satoda <k_satoda@f2.dion.ne.jp> - 2012-06-23 13:13 -0700
Re: Contradicting definition of empty shared_ptr on shared_ptr(nullptr, d) Daniel Krügler<daniel.kruegler@googlemail.com> - 2012-06-24 00:03 -0700
Re: Contradicting definition of empty shared_ptr on shared_ptr(nullptr, d) Kazutoshi Satoda <k_satoda@f2.dion.ne.jp> - 2012-06-24 23:49 -0700
csiph-web