On Tue, Nov 12, 2013 at 04:38:17PM +0000, David Chisnall wrote: > On 12 Nov 2013, at 16:32, Steve Kargl <sgk_at_troutmask.apl.washington.edu> wrote: > >> Trying to build news/pan with clang++ dies with >> >> gmake[3]: Entering directory `/usr/ports/news/pan/work/pan-0.139/pan/general' >> CXX file-util.o >> In file included from file-util.cc:38: >> In file included from ./log.h:26: >> /usr/include/c++/v1/deque:907:49: error: invalid application of 'sizeof' to an >> incomplete type 'value_type' (aka 'pan::Log::Entry') >> static const difference_type __block_size = sizeof(value_type) < 256 ? 4... >> >> Anyone know how to fix either clang++ or libc++? > > The error here does not appear to be in clang or libc++, but in the > use by the thing that you are compiling. > This is saying that you have tried to create a std::dequeu<pan::Log::Entry>, > but pan::Log::Entry is a forward declaration and so the template > instantiation fails. > The fix is to move the definition of pan::Log::Entry such that it > is visible at the time of its use. > I don't know C++, but it is at all like C, then the header files are normally placed at the top of a file before one's code. In this case, the code in news/pan/work/pan-0.139/pan/general/log.h looks like (where I've striped comment to keep it short) #ifndef __Log_h__ #define __Log_h__ #include <ctime> #include <set> #include <string> #include <deque> namespace pan { class Log { public: enum Severity { PAN_SEVERITY_INFO = 1, PAN_SEVERITY_ERROR = 2, PAN_SEVERITY_URGENT = (1<<10) }; struct Entry { time_t date; Severity severity; std::deque<Entry> messages; std::string message; bool is_child; Entry() : is_child(false) { } }; void add_entry(Entry& e, std::deque<Entry>& list); Are you saying that I need to move '#include <deque>' to the location above the 'void add_entry(...)' line? -- SteveReceived on Tue Nov 12 2013 - 15:54:23 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:44 UTC