From owner-freebsd-current@FreeBSD.ORG Tue Nov 12 16:54:23 2013 Return-Path: Delivered-To: freebsd-current@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 038A9115; Tue, 12 Nov 2013 16:54:23 +0000 (UTC) Received: from troutmask.apl.washington.edu (troutmask.apl.washington.edu [128.95.76.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id D98412C1F; Tue, 12 Nov 2013 16:54:22 +0000 (UTC) Received: from troutmask.apl.washington.edu (localhost.apl.washington.edu [127.0.0.1]) by troutmask.apl.washington.edu (8.14.7/8.14.7) with ESMTP id rACGsM9l003000; Tue, 12 Nov 2013 08:54:22 -0800 (PST) (envelope-from sgk@troutmask.apl.washington.edu) Received: (from sgk@localhost) by troutmask.apl.washington.edu (8.14.7/8.14.7/Submit) id rACGsMZM002999; Tue, 12 Nov 2013 08:54:22 -0800 (PST) (envelope-from sgk) Date: Tue, 12 Nov 2013 08:54:22 -0800 From: Steve Kargl To: David Chisnall Subject: Re: Are clang++ and libc++ compatible? Message-ID: <20131112165422.GA2939@troutmask.apl.washington.edu> References: <20131112163219.GA2834@troutmask.apl.washington.edu> <77CB2B92-216A-4C80-B033-7E582B5F0DFC@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <77CB2B92-216A-4C80-B033-7E582B5F0DFC@FreeBSD.org> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: freebsd-current@FreeBSD.org X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Nov 2013 16:54:23 -0000 On Tue, Nov 12, 2013 at 04:38:17PM +0000, David Chisnall wrote: > On 12 Nov 2013, at 16:32, Steve Kargl 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, > 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 #include #include #include 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 messages; std::string message; bool is_child; Entry() : is_child(false) { } }; void add_entry(Entry& e, std::deque& list); Are you saying that I need to move '#include ' to the location above the 'void add_entry(...)' line? -- Steve