Hello Walter,
Yes, this is due to a way how Cint deals with template with
default argument and typedef. Basically, when Cint sees
vector<Int_t>, it actually instantiates vector<int,allocator<int> >
and typedef vector<Int_t> as the same class. Unfortunately,
vector<int> is not defined and remains as an unknown name.
On the other hand, if vector<int> is instantiated, Cint creates
vector<int,allocator<int> > and typedef vector<int>. When
vector<Int_t> is referred, it refers to vector<int>. This is why
it works for latter case. I'll see if I can fix this behavior.
Thank you
Masa Goto
----- Original Message -----
From: "Walter F.J. Mueller" <W.F.J.Mueller@gsi.de>
To: <roottalk@pcroot.cern.ch>
Sent: Sunday, May 04, 2003 5:31 AM
Subject: [ROOT] Instantiation of precompiled STL containers and typedefs
> Dear ROOTers, Philippe, Masaharu, { using 3.05/04 }
>
> I followed Philippe suggestion given on roottalk on 06-Sep-2002 and
> added something like
>
> #pragma link C++ class vector<Int_t>!-;
>
> in a Linkdef file. As a result I was able to instantiate in CINT
> the vectors
>
> vector<Int_t>
> vector<int,allocator<int> >
>
> but not
>
> vector<int>
>
> which results in the error message
>
> Limitation: Can't instantiate precompiled template vector<int>
>
> If I use instead in the LinkDef file
>
> #pragma link C++ class vector<int>!-;
>
> I can instantiate and use in CINT
>
> vector<Int_t>
> vector<int,allocator<int> >
> vector<int>
>
> There seems to be some interference between typedefs and the way
> STL container instantiations are handled.
>
> Cheers,
> Walter
>
>
> --
> Walter F.J. Mueller Mail: W.F.J.Mueller@gsi.de
> GSI, Abteilung KP3 Phone: +49-6159-71-2766
> D-64291 Darmstadt FAX: +49-6159-71-2989
> WWW: http://www-kp3.gsi.de/www/kp3/people/mueller.html
>
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:11 MET