Newsgroup: it.comp.lang.c++
Titolo: template e egcs. Problemi di teoria...

Salve a tutti. 
Volevo esporre il solito problema di "instantiation" di templates. 
Con g++ 2.7 etc, io utilizzavo il metodo "bovino": -f
no-implicit-templates, e un bel file dove instanziavo tutti i template
che mi servivano. Quelli di libreria (eg <iomanip.h>) non hanno mai
dato problemi. Con egcs, invece, avrei dovuto instanziare anche quelli
(s.e.o.). 
Allora ho pensato di usare il repository che dicono funziona. Il mio
template inizia cosi:
template <class T>
class VectorT {
    T *v;
    int lb,ub;
    bool allocated;
    void allocate(int a,int b);
    void copy(const VectorT& ov);
public:
    friend T* nr(VectorT<T>& mv);
    friend T* nrc(const VectorT<T>& mv);
    VectorT() {allocate(1,0);}    
...
 (eccetera). 
Al compilare mi dice una classe che usa tale dichiarazione, mi viene
detto:
 g++ -g -Wall  -frepo -I/usr/local/include -I../libvm -c fainet2p.cc
               -o fainet2p.o  
../libvm/VectorT.h:22: warning: friend declaration 
   `T * nr(class VectorT<T> &)' 
../libvm/VectorT.h:22: warning: will not be
   treated as a template instantiation 
../libvm/VectorT.h:22: warning:
   unless you compile with -fguiding-decls 
../libvm/VectorT.h:22:
   warning: or add <> after the function name
e poi non linka. Con -fguiding-decls funziona, ok, ma nel manuale dice
che e' una compatibilita' verso una cosa "sparita" dallo standard a
fine 1996. 
Visto che non ho capito che succede, c'e' qualcuno qui che me lo puo'
spiegare? (ho messo l'indirizzo non manglato, sigh, arrivera' lo
spam...) 
Grazie mille,
                Romano
-- 
-----------------------------------------------------------------------
|Dr. Romano Giannetti   | Electronic Engineer | From: address may be  |
|romano @ 
iet.unipi.it
  | University of Pisa  | mangled to avoid spam.|
-----------------------------------------------------------------------

    friend T* nr(VectorT<T>& mv);
Mi pare che la sintassi da usare sia
    friend T* nr(VectorT& mv);
cioé senza il <T>, che é implicito in
questa classe template.
Alex

,

Hmmm... il compilatore lo prende lo stesso ma la cosa non cambia, devo
aggiungere -fguiding-decls senno non mi instanzia i template. 
Inizio a odiare la commissione di standardizzazione. C++ sta
diventando un bersaglio mobile e sempre piu' complicato. 
Ciao,


diventando un bersaglio mobile e sempre piu' complicato.
Il final draft dell'International Standard é stato approvato in
Novembre, e il voto di approvazione definitiva dello standard
é dell'altra settimana, quindi, almeno, la "mobilitá del bersaglio"
é un problema superato... lo standard esiste ed é fermo "da
un pezzo", relativamente parlando (9 mesi...).
Alex

 };
 
Note that you might have omitted the `T', but not the angle brackets,
in the template argument list, i.e., the following friend declarations
would be equivalent:
      friend T* nr<>(Vector<T>&);
      friend T* nrc<>(const VectorT<T>&);
unless there were other template functions named nr and nrc that might
have matched the argument lists; in which case the friend declarations
without the explicit template argument list would be ambiguous.
Grazie a tutti,


edition?
No, purtroppo.  L'unica é comprarsi lo Stroustrup 3rd edition
_in un printing MOLTO recente_ (continua a fixare errorini e
dettagli ad ogni printing, dannazione, sono stato un'ora ad
applicare gli errata ed ero solo a pagina 200 di 1000 e ho
lasciato perdere... me ne regaleró uno aggiornato al prossimo
viaggio in USA!-).
Alex

 _in un printing MOLTO recente_ (continua a fixare errorini e
[...]
Io qualcosa ho trovato, almeno per avere un'idea... 
 
http://nw.demon.co.uk/ocsltd/c++/
 
anche se non so quanto e' aggiornato. 
Ciao,


anche se non so quanto e' aggiornato. 
Buon riferimento, grazie.  L'ho esaminato e sembra decisamente
aggiornato, anche se non entra in tanti piccoli ma cruciali dettagli
(auto_ptr, <locale>, ecc), o almeno io non li ho visti.
Ricambio con un puntatore alla versione piu' aggiornata che ho
trovato del "Modest STL Tutorial" di Jak (e' quella sulla sua home
page).  Non e', decisamente, "aggiornatissima" (basti il fatto che
usa il .h nei nomi dei file di include e non discute del namespace
std...), comunque puo' sicuramente essere utile per cominciare.
http://www.cs.brown.edu/people/jak/proglang/cpp/stltut/tut.htm
Alex