Re: Are clang++ and libc++ compatible?

From: Steve Kargl <sgk_at_troutmask.apl.washington.edu>
Date: Tue, 12 Nov 2013 08:54:22 -0800
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?

-- 
Steve
Received 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