Peter, According to the specification (14.7.1.5), the requirement of that template instantiation is left up to the implementation. -- If the overload resolution process can determine the correct function to call without instantiating a class template definition, it is unspecified whether that instantiation actually takes place. [Example: template <class T> struct S { operator int(); }; void f(int); void f(S<int>&); void f(S<float>); void g(S<int>& sr) { f(sr); //instantiation of S<int> allowed but not required // instantiation of S<float> allowed but not required }; âend example] corey On Tue, 1 Feb 2005 22:02:15 +0100, Peter Soetens <peter.soetens@xxxxxxxxxxxxxxxxxxx> wrote: > Hi, > > The code below compiles fine with Intel's icc. However, > all gcc versions refused to compile it saying : > > g++ -c -o ttt.o ttt.cpp > ttt.cpp: In instantiation of `Property<F>': > ttt.cpp:15: instantiated from `bool Property<T>::change(PropOp*) [with T = > double]' > ttt.cpp:23: instantiated from here > ttt.cpp:13: error: `Property<T>::val' has incomplete type > ttt.cpp:1: error: forward declaration of `struct F' > > -----Code----- > struct F; > > template< class T > > struct Property; > > struct PropOp { > bool update( Property<F>* f) { return false; } > bool update( Property<double>* d) { return true; } > }; > > template<class T> > struct Property { > T val; > bool change( PropOp* p) { > return p->update( this ); // Line 15 > } > }; > > int main() > { > PropOp po; > Property<double> pd; // Line 23 > pd.change( &po ); > return 0; > } > > ----EndCode--- > > May I submit this as a bug ? I believe Property<F> should not be instantiated > in line 15, only Property<double> should be. > > Peter > > PS: Please CC me. > > -- > ------------------------------------------------------------------------ > Peter Soetens, Research Assistant http://www.orocos.org > Katholieke Universiteit Leuven > Division Production Engineering, tel. +32 16 322773 > Machine Design and Automation fax. +32 16 322987 > Celestijnenlaan 300B peter.soetens@xxxxxxxxxxxxxxxxxxx > B-3001 Leuven Belgium http://www.mech.kuleuven.ac.be/pma > ------------------------------------------------------------------------ >