On Thu, Apr 17, 2014 at 7:31 AM, Mike Vermeulen <mevermeu...@gmail.com> wrote: > Following is a reduced test case from parsec suite that compiles with g++ > and fails to compile with clang++ 3.4: > > template<class T> class MATRIX_3X3; > > template<class T> class DIAGONAL_MATRIX_3X3; > > > > template<class T> > > class SYMMETRIC_MATRIX_3X3 > > { > > public: > > void Fast_Solve_Eigenproblem(DIAGONAL_MATRIX_3X3<T>& eigenvalues, > > MATRIX_3X3<T>& eigenvectors) const > > { > > DIAGONAL_MATRIX_3X3<double> eigenvalues_double; > > MATRIX_3X3<double> eigenvectors_double; > > eigenvalues = eigenvalues_double; > > eigenvectors = eigenvectors_double; > > } > > }; > > > The error messages I receive are: > > ./matrix.hpp: 11:33: error: implicit instantiation of undefined template > ‘DIAGONAL_MATRIX_3X3<double>’ > > ./matrix.hpp: 2:25: note: template is declared here > > ./matrix.hpp:12:24: error: implicit instantiation of undefined template > ‘MATRIX_3X3<double>’ > > ./matrix.hpp:1:25: note: template is declared here > > 2 errors generated > > > Is there something I am missing - or a way to modify this code to make it > compile with clang++?
There are many situations with templates that are "invalid, no diagnostic required". Clang is more aggressive in many of these cases (mostly non-dependent expressions inside templates - Clang figures those out and evaluates them in some places GCC doesn't (I think there are inverse cases too, where GCC rejects things Clang accepts and both compilers are correct/allowed to do so)). You simply have to provide the definition of that template if you want to write out non-dependent expressions using specializations of it. _______________________________________________ cfe-users mailing list cfe-users@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users