On Tue, Nov 12, 2013 at 04:38:17PM +0000, David Chisnall wrote:
> On 12 Nov 2013, at 16:32, Steve Kargl <s...@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
      enum Severity {
        PAN_SEVERITY_INFO = 1,
        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?

freebsd-current@freebsd.org mailing list
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to