On Fri, Jan 16, 2009 at 3:12 PM, Anders Logg <[email protected]> wrote: > On Fri, Jan 16, 2009 at 02:57:08PM +0100, Martin Sandve Alnæs wrote: >> On Fri, Jan 16, 2009 at 2:22 PM, Anders Logg <[email protected]> wrote: >> > On Fri, Jan 16, 2009 at 02:06:54PM +0100, Harish Narayanan wrote: >> >> Harish Narayanan wrote: >> >> > Anders Logg wrote: >> >> >> On Fri, Jan 16, 2009 at 01:16:45PM +0100, Harish Narayanan wrote: >> >> >>> DOLFIN wrote: >> >> >>>> One or more new changesets pushed to the primary dolfin repository. >> >> >>>> A short summary of the last three changesets is included below. >> >> >>>> >> >> >>>> changeset: 5579:f90965f4a6e518162a8b0dc857228d8b8bbf1624 >> >> >>>> tag: tip >> >> >>>> parent: 5577:c4cd050190c69bad85e19f49ee57c1d973e42c7e >> >> >>>> parent: 5578:ce32197ca04ec1e1aeb52d73f6edaa3599332bd3 >> >> >>>> user: Anders Logg <[email protected]> >> >> >>>> date: Wed Jan 14 22:08:42 2009 +0100 >> >> >>>> files: dolfin/mesh/IntersectionDetector.cpp >> >> >>>> description: >> >> >>>> Merge update to IntersectionDetector and attempt to fix buildbot >> >> >>>> error. >> >> >>> Did you run into something like the following? Because that is what I >> >> >>> am >> >> >>> seeing now when I try to compile DOLFIN. Does this need gcc 4.3+ to >> >> >>> work? >> >> >> No, the problem I fixed was the functions at the bottom of >> >> >> IntersectionDetector.cpp (which are used in the case HAS_GTS is not >> >> >> defined). >> >> >> >> >> >> Your problem seems to be different and looks compiler-related. >> >> >> >> >> >> Can you try breaking up the offending line in parts to see what causes >> >> >> the error: >> >> >> >> >> >> cout << "Found " << intersected_cells.size() << " cells in Omega0" >> >> >> << endl; >> >> >> >> >> >> Change to >> >> >> >> >> >> cout << "Found "; >> >> >> cout << intersected_cells.size(); >> >> >> cout << " cells in Omega0"; >> >> >> cout << endl; >> >> > >> >> > I did that, and as expected, it's the cout << intesected_cells.size(); >> >> > line that causes it to fail. >> >> > >> >> > dolfin/mesh/IntersectionDetector.cpp: In member function 'void >> >> > dolfin::IntersectionDetector::new_intersection(const dolfin::Mesh&, >> >> > std::vector<dolfin::uint, std::allocator<dolfin::uint> >&)': >> >> > dolfin/mesh/IntersectionDetector.cpp:129: error: ambiguous overload for >> >> > 'operator<<' in 'dolfin::cout << intersected_cells. std::vector<_Tp, >> >> > _Alloc>::size [with _Tp = dolfin::uint, _Alloc = >> >> > std::allocator<dolfin::uint>]()' >> >> > ./dolfin/log/LogStream.h:29: note: candidates are: dolfin::LogStream& >> >> > dolfin::LogStream::operator<<(const char*) <near match> >> >> > ./dolfin/log/LogStream.h:30: note: dolfin::LogStream& >> >> > dolfin::LogStream::operator<<(const std::string&) <near match> >> >> > ./dolfin/log/LogStream.h:31: note: dolfin::LogStream& >> >> > dolfin::LogStream::operator<<(int) >> >> > ./dolfin/log/LogStream.h:32: note: dolfin::LogStream& >> >> > dolfin::LogStream::operator<<(unsigned int) >> >> > ./dolfin/log/LogStream.h:33: note: dolfin::LogStream& >> >> > dolfin::LogStream::operator<<(double) >> >> > ./dolfin/log/LogStream.h:34: note: dolfin::LogStream& >> >> > dolfin::LogStream::operator<<(dolfin::complex) >> >> > ./dolfin/log/LogStream.h:35: note: dolfin::LogStream& >> >> > dolfin::LogStream::operator<<(const dolfin::LogStream&) <near match> >> >> > ./dolfin/log/LogStream.h:37: note: dolfin::LogStream& >> >> > dolfin::LogStream::operator<<(dolfin::real) >> >> > dolfin/mesh/Point.h:111: note: dolfin::LogStream& >> >> > dolfin::operator<<(dolfin::LogStream&, const dolfin::Point&) >> >> >> >> ... and typecasting it to uint resolves the problem. >> >> >> >> uint(intersected_cells.size()) >> > >> > ok, the problem is that std::vector::size does not return unsigned int >> > on your machine. >> > >> > dolfin::uint is a typedef that should preferrably be the same as >> > whatever the STL classes use (size_t?). >> >> I suspect that would move the problems elsewhere. >> Most of our external dependencies use int many places >> where dolfin uses uint, and if sizeof(uint) != sizeof(size_t) >> we'll have big problems with moving arrays of uint to >> arrays of size_t. >> >> The real problem in this case is probably that the dolfin >> log system doesn't build on the standard C++ streams, >> but has hardcoded its own C implementation of writing >> a small set of types. >> >> LogStream should probably inherit std::ostream or >> something. The way LogStream is built seems to >> severely restrict the features you can use vs what >> std::cout would allow. > > Good point! Feel free to write a new dolfin::LogStrem class. > > :-)
No way :-) Martin _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
