Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #12582

Re: Is this a bug of std::unique_ptr?

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>

Show all headers | View raw


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


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