public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
@ 2003-02-08 15:36 Paolo Carlini
  0 siblings, 0 replies; 8+ messages in thread
From: Paolo Carlini @ 2003-02-08 15:36 UTC (permalink / raw)
  To: paolo; +Cc: gcc-prs

The following reply was made to PR libstdc++/9626; it has been noted by GNATS.

From: Paolo Carlini <pcarlini@unitus.it>
To: Cc: Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>, 
 gcc-bugs@gcc.gnu.org,  gcc-gnats@gcc.gnu.org
Subject: Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
Date: Sat, 08 Feb 2003 16:28:16 +0100

 Well... really interesting.
 
 I found a *very* interesting interchange on C++-moderated back in 
 May-2002, between John Potter, Carlos Moreno and others:
 
 http://groups.google.it/groups?hl=it&lr=&ie=UTF-8&threadm=3cf85a1f.17498620%40news.earthlink.net&rnum=40&prev=/groups%3Fq%3Dvector%253Cvector%2Bgroup:comp.*%26start%3D30%26hl%3Dit%26lr%3D%26ie%3DUTF-8%26selm%3D3cf85a1f.17498620%2540news.earthlink.net%26rnum%3D40 
 
 
 It ends with them _agreeing_ that the syntax is _legal_ and John 
 replying to another guy:
 
 > > When people ask me what the keyword 'explicit' is for I usually take a
 > > vector in particular as an example: > Speaking of std::vector it has 
 > > explicit vector(size_type n, const T& value = T(),
 > >              const Allocator& = Allocator()); > so I'd expect that > 
 > vector< vector<int> > values (20, 30); 
 > > must NOT compile on a conformant implementation.
 >
 > However, 20 is not a size_type and it does not match that constructor.
 > It matches
 >
 > template <class InputIterator>
 > vector (InputIterator first, InputIterator last,
 >       Allocator const& = Allocator());
 >
 > Since int can't be an iterator, the implementation is required to make
 > it act the same as
 >
 > vector(static_cast<size_type>(first), static_cast<value_type>(last));
 >
 > The second static_cast takes care of your concerns about explicit.
 >
 > See 23.1.1/9
 >
 > John
 
 At this point I think we can safely close the report!
 Paolo.
 
 
 
 
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9626
 
 
 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
@ 2003-02-08 15:26 Falk Hueffner
  0 siblings, 0 replies; 8+ messages in thread
From: Falk Hueffner @ 2003-02-08 15:26 UTC (permalink / raw)
  To: paolo; +Cc: gcc-prs

The following reply was made to PR libstdc++/9626; it has been noted by GNATS.

From: Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
To: Paolo Carlini <pcarlini@unitus.it>
Cc: paolo@gcc.gnu.org,  gcc-bugs@gcc.gnu.org,  gcc-prs@gcc.gnu.org,
	  gcc-gnats@gcc.gnu.org
Subject: Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
Date: 08 Feb 2003 16:16:38 +0100

 Paolo Carlini <pcarlini@unitus.it> writes:
 
 > Falk Hueffner wrote:
 > >No. I pass a 4, but the constructor expects an A = vector<int>. The
 > >only way to make a "vector<int>" from "4" is with an "explicit"
 > >constructor.
 >
 > Why the constructor expects a vector<int>? Which constructor?
 
 The constructor of vector<vector<int> >, as second argument.
 
 -- 
 	Falk


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
@ 2003-02-08 15:25 paolo
  0 siblings, 0 replies; 8+ messages in thread
From: paolo @ 2003-02-08 15:25 UTC (permalink / raw)
  To: falk.hueffner, gcc-bugs, gcc-prs, paolo

Synopsis: g++ accepts vector<vector<int> > v(2, 4);

State-Changed-From-To: feedback->closed
State-Changed-By: paolo
State-Changed-When: Sat Feb  8 15:25:25 2003
State-Changed-Why:
    Not illegal, for a _very_ subtle reason...

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9626


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
@ 2003-02-08 13:56 Paolo Carlini
  0 siblings, 0 replies; 8+ messages in thread
From: Paolo Carlini @ 2003-02-08 13:56 UTC (permalink / raw)
  To: paolo; +Cc: gcc-prs

The following reply was made to PR libstdc++/9626; it has been noted by GNATS.

From: Paolo Carlini <pcarlini@unitus.it>
To: Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
Cc: paolo@gcc.gnu.org,  gcc-bugs@gcc.gnu.org,  gcc-prs@gcc.gnu.org, 
 gcc-gnats@gcc.gnu.org
Subject: Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
Date: Sat, 08 Feb 2003 14:55:17 +0100

 Falk Hueffner wrote:
 
 >No. I pass a 4, but the constructor expects an A = vector<int>. The
 >only way to make a "vector<int>" from "4" is with an "explicit"
 >constructor.
 >
 Why the constructor expects a vector<int>? Which constructor?
 This constructor:
 
   explicit vector(size_type n, const T& value = T(),
                 const Allocator& = Allocator())
 
 expects a size_type!
 
 Paolo.
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9626
    
 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
@ 2003-02-08 13:56 Falk Hueffner
  0 siblings, 0 replies; 8+ messages in thread
From: Falk Hueffner @ 2003-02-08 13:56 UTC (permalink / raw)
  To: paolo; +Cc: gcc-prs

The following reply was made to PR libstdc++/9626; it has been noted by GNATS.

From: Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
To: paolo@gcc.gnu.org
Cc: gcc-bugs@gcc.gnu.org,  gcc-prs@gcc.gnu.org,  gcc-gnats@gcc.gnu.org,
	  paolo@gcc.gnu.org
Subject: Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
Date: 08 Feb 2003 14:48:07 +0100

 paolo@gcc.gnu.org writes:
 
 > Synopsis: g++ accepts vector<vector<int> > v(2, 4);
 > 
 > State-Changed-From-To: analyzed->feedback
 > State-Changed-By: paolo
 > State-Changed-When: Sat Feb  8 13:36:01 2003
 > State-Changed-Why:
 
 >     On second thought, doesn't seem to me that your testcase is
 >     illegal. You are asking for a size 2 vector of size 4 vectors:
 >     there are no implicit conversions which should be prevented by
 >     explicit, since 4 is the argument of the explicit vector(const
 >     A& = A()) constructor of each of them and this seems perfectly
 >     legal.  Agreed?
 
 No. I pass a 4, but the constructor expects an A = vector<int>. The
 only way to make a "vector<int>" from "4" is with an "explicit"
 constructor.
 
 -- 
 	Falk


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
@ 2003-02-08 13:46 Paolo Carlini
  0 siblings, 0 replies; 8+ messages in thread
From: Paolo Carlini @ 2003-02-08 13:46 UTC (permalink / raw)
  To: paolo; +Cc: gcc-prs

The following reply was made to PR libstdc++/9626; it has been noted by GNATS.

From: Paolo Carlini <pcarlini@unitus.it>
To: gcc-gnats@gcc.gnu.org,  gcc-bugs@gcc.gnu.org,  paolo@gcc.gnu.org, 
 gcc-prs@gcc.gnu.org,  falk.hueffner@student.uni-tuebingen.de
Cc:  
Subject: Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
Date: Sat, 08 Feb 2003 14:38:36 +0100

  > explicit vector(const A& = A()) constructor of each of them
 
 sorry, of course I really meant:
 
    explicit vector(size_type n, const T& value = T(),
                  const Allocator& = Allocator())
 
 constructor of each of them...
 
 Paolo.
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9626
 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
@ 2003-02-08 13:36 paolo
  0 siblings, 0 replies; 8+ messages in thread
From: paolo @ 2003-02-08 13:36 UTC (permalink / raw)
  To: falk.hueffner, gcc-bugs, gcc-prs, paolo

Synopsis: g++ accepts vector<vector<int> > v(2, 4);

State-Changed-From-To: analyzed->feedback
State-Changed-By: paolo
State-Changed-When: Sat Feb  8 13:36:01 2003
State-Changed-Why:
    On second thought, doesn't seem to me that your testcase is
    illegal. You are asking for a size 2 vector of size 4 vectors: there are no implicit conversions which should be prevented by explicit, since 4 is the argument of the
    explicit vector(const A& = A()) constructor of each of them
    and this seems perfectly legal.
    Agreed?

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9626


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4);
@ 2003-02-08  9:25 paolo
  0 siblings, 0 replies; 8+ messages in thread
From: paolo @ 2003-02-08  9:25 UTC (permalink / raw)
  To: falk.hueffner, gcc-bugs, gcc-prs, nobody, paolo

Synopsis: g++ accepts vector<vector<int> > v(2, 4);

Responsible-Changed-From-To: unassigned->paolo
Responsible-Changed-By: paolo
Responsible-Changed-When: Sat Feb  8 09:25:05 2003
Responsible-Changed-Why:
    Analyzing.
State-Changed-From-To: open->analyzed
State-Changed-By: paolo
State-Changed-When: Sat Feb  8 09:25:05 2003
State-Changed-Why:
    Confirmed according to 23.2.4.1: seems an SGI extension.
    Currently the explicit keyword is missing from the relevant
    constructor and moreover, an additional one, non-standard,
    is provided having the following signature
      explicit vector(size_type n)
    Will pool the list...

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9626


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2003-02-08 15:36 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-02-08 15:36 libstdc++/9626: g++ accepts vector<vector<int> > v(2, 4); Paolo Carlini
  -- strict thread matches above, loose matches on Subject: below --
2003-02-08 15:26 Falk Hueffner
2003-02-08 15:25 paolo
2003-02-08 13:56 Paolo Carlini
2003-02-08 13:56 Falk Hueffner
2003-02-08 13:46 Paolo Carlini
2003-02-08 13:36 paolo
2003-02-08  9:25 paolo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).