From owner-freebsd-bugs@FreeBSD.ORG Wed Nov 30 05:41:38 2011 Return-Path: Delivered-To: freebsd-bugs@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 50659106564A; Wed, 30 Nov 2011 05:41:38 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail03.syd.optusnet.com.au (mail03.syd.optusnet.com.au [211.29.132.184]) by mx1.freebsd.org (Postfix) with ESMTP id D5FDA8FC14; Wed, 30 Nov 2011 05:41:37 +0000 (UTC) Received: from c211-28-227-231.carlnfd1.nsw.optusnet.com.au (c211-28-227-231.carlnfd1.nsw.optusnet.com.au [211.28.227.231]) by mail03.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id pAU5fWpH029588 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 30 Nov 2011 16:41:33 +1100 Date: Wed, 30 Nov 2011 16:41:32 +1100 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Emil In-Reply-To: <201111291914.pATJE2s3005905@red.freebsd.org> Message-ID: <20111130161749.P1108@besplex.bde.org> References: <201111291914.pATJE2s3005905@red.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: freebsd-bugs@FreeBSD.org, freebsd-gnats-submit@FreeBSD.org Subject: Re: misc/162952: Problems including netinet/tcp_var.h X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Nov 2011 05:41:38 -0000 On Tue, 29 Nov 2011, Emil wrote: > FreeBSD $HOSTNAME.local 8.2-RELEASE FreeBSD 8.2-RELEASE #3: Sat Apr 16 09:20:53 CEST 2011 emil@$HOSTNAME.local:/usr/obj/usr/src/sys/IPSEC i386 > >> Description: > When attempting to include netinet/tcp_var.h in a c++ file, the compiler throws a number of errors. > > "In file included from INPUT.cpp:1: > /usr/include/netinet/tcp_var.h:51: error: expected ';' before 'tqe_q' > /usr/include/netinet/tcp_var.h:56: error: expected constructor, destructor, or type conversion before '(' token > /usr/include/netinet/tcp_var.h:67: error: expected ';' before 'scblink' > /usr/include/netinet/tcp_var.h:102: error: field 't_segq' has incomplete type > /usr/include/netinet/tcp_var.h:184: error: 'sackhole_head' has not been declared > /usr/include/netinet/tcp_var.h:184: error: expected ';' before 'snd_holes' > /usr/include/netinet/tcp_var.h:318: error: expected ';' before 'tw_2msl'" > > I am assuming that I am missing an include, as such I have filed this as a documentation bug. >> How-To-Repeat: > execute "c++ INPUT" > > INPUT.cpp > > 1 #include Most networking headers have _many_ undocumented prerequisites. tcp_var.h itself is is not really documented, so you just have to know what its prerequisites are and shouldn't expect it to work for C++. You have to be a networking person or use trial and error to know the prerequisites. (In 2004, tcp_var.h was not mentioned in any man page. Now it is mentioned in siftr.4 and hhook.9, and these references are only usable for human readers of tcp_var.h. hhook.9 has a synopsis that can't possibly work due to missing prerequisites for the 1 header that it satisifies, despite massive pollution internal to this header.) When I stopped policing prerequisites in 1999, minimal prerequisites for were #include #include #include #include #include in that order. These were found by trial and error (many trials and many errors for each file tested. The trials included complete tests of subsets to find a minimum that worked for a range of compilers and compiler options, and incomplete tests of ordering). These still work, at least with gcc and normal compiler options. They happen to work for C++ too. Bruce