Re: using vector to encapulate a tree - non const copy constructors
terry wrote:
class mytree: public T, protected std::vector<mytree>{};
This comes up pretty often: vector<> requires a complete type as parameter
but 'mytree' above is not a complete type.
I think you are wrong on this - I am pretty sure this is corredct and well
withint he standard.
?17.4.3.6/2: "In particular, the effects are undefined in the
following cases: [...] -- if an incomplete type (3.9) is used as
a template argument when instantiating a template component."
It couldn't be any clearer.
FWIW: his code doesn't compile with one of my compilers.
In particular mytree's size is well defined in much the same way a pointer
is defined.
In particular, mytree's size is only defined after mytree has
been completely defined. And the size of a pointer may also
depend on the type---I've worked on machines where sizeof(char*)
!= sizeof(int*), for example.
vector<> encapuslates a pointer to an aray stored on the heap
Maybe, maybe not. It depends on the implementation. (With g++,
on a 32 bit machine, the size of a vector<int> is 28, whereas
the size of a pointer is 4. So vector is more than just a
single pointer.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]