Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #12582
| From | "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com> |
|---|---|
| Newsgroups | comp.lang.c++ |
| Subject | Re: Is this a bug of std::unique_ptr? |
| Date | 2011-12-16 15:44 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <jcflgl$8s2$1@dont-email.me> (permalink) |
| References | <ce2b9e0b-e441-43fd-aa1d-1f7ef3a0193b@q9g2000yqe.googlegroups.com> |
On 16.12.2011 15:28, Jayden Shui wrote:
>
> I accidently find that the following code works with Visual C++
> compilation
>
> #include<memory>
> #include<iostream>
> using namespace std;
>
> int main()
> {
> unique_ptr<int> const p = new int(1);
> unique_ptr<int>& q = p; // assign a constant to a non-constant
> reference
> q.reset(new int(2));
> cout<< *p; // output 2
> return 0;
> }
>
> My question is from the 2nd statement of assigning a constant to a non-
> constant reference. I think the compiler should report an compilation
> error, but it doesn't. Is this a bug of the code of unique_ptr in the
> std template library?
It seems to be a case PEBKAC.
<example>
[d:\dev\test]
> (cl /nologo- 2>&1) | find /i "++"
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01
for 80x86
[d:\dev\test]
> cl foo.cpp
foo.cpp
foo.cpp(7) : error C2440: 'initializing' : cannot convert from 'int *'
to 'std::unique_ptr<_Ty>'
with
[
_Ty=int
]
Constructor for class 'std::unique_ptr<_Ty>' is declared 'explicit'
with
[
_Ty=int
]
foo.cpp(8) : error C2440: 'initializing' : cannot convert from 'const
std::unique_ptr<_Ty>' to 'std::unique_ptr<_Ty> &'
with
[
_Ty=int
]
Conversion loses qualifiers
[d:\dev\test]
> (g++ --version 2>&1) | find /i "++"
g++ (TDM-2 mingw32) 4.4.1
[d:\dev\test]
> g++ -std=c++0x foo.cpp
foo.cpp: In function 'int main()':
foo.cpp:7: error: conversion from 'int*' to non-scalar type 'const
std::unique_ptr<int, std::default_delete<int> >' requested
foo.cpp:8: error: invalid initialization of reference of type
'std::unique_ptr<int, std::default_delete<int> >&' from expression of
type 'const std::unique_ptr<int, std::default_delete<int> >'
[d:\dev\test]
> _
</example>
Cheers & hth.,
- Alf
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Is this a bug of std::unique_ptr? Jayden Shui <jayden.shui@gmail.com> - 2011-12-16 06:28 -0800
Re: Is this a bug of std::unique_ptr? "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com> - 2011-12-16 15:44 +0100
Re: Is this a bug of std::unique_ptr? Jayden Shui <jayden.shui@gmail.com> - 2011-12-16 06:50 -0800
Re: Is this a bug of std::unique_ptr? yatremblay@bel1lin202.(none) (Yannick Tremblay) - 2011-12-19 11:26 +0000
Re: Is this a bug of std::unique_ptr? Krice <paulkp@mbnet.fi> - 2011-12-16 07:01 -0800
csiph-web