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 <netinet/tcp_var.h>

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 <netinet/tcp_var.h> were

        #include <sys/types.h>
        #include <netinet/in.h>
        #include <netinet/in_systm.h>
        #include <netinet/ip_var.h>
        #include <netinet/tcp.h>

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
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to