Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Jan 2005 17:08:59 -0500 (EST)
From:      "Mark A. Wicks" <mwicks@kettering.edu>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/76730: [patch] dynamic_bitset broken in boost 1.32
Message-ID:  <200501262208.j0QM8xTr021520@gaspra.kettering.edu>
Resent-Message-ID: <200501262210.j0QMAD8D032696@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         76730
>Category:       ports
>Synopsis:       [patch] dynamic_bitset broken in boost 1.32
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jan 26 22:10:12 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Mark A. Wicks
>Release:        FreeBSD 5.3-RELEASE-p5 i386
>Organization:
Kettering University
>Environment:
System: FreeBSD gaspra.kettering.edu 5.3-RELEASE-p5 FreeBSD 5.3-RELEASE-p5 #13: Fri Jan 21 09:14:40 EST 2005 mwicks@gaspra.kettering.edu:/usr/obj/usr/src/sys/gaspra-5.3 i386
gcc version 3.4.2 [FreeBSD] 20040728

>Description:

Having BOOST_NO_INCLASS_MEMBER_INITIALIZATION defined in bsd.hpp
causes boost to use anonymous enums.  Anonymous enums are considered
to be different types in gcc 3.4.0 even when declared identically.  As
a result, any ports using dynamic_bitset won't compile.

>How-To-Repeat:
Compile the following program:

#include <boost/dynamic_bitset.hpp>

int main(int, char*[]) {
  boost::dynamic_bitset<> x(2);
  return 0;
}

This produces the following errors:

usr/local/include/boost/dynamic_bitset/dynamic_bitset.hpp: In constructor `boost::dynamic_bitset<Block, Allocator>::dynamic_bitset(size_t, long unsigned int, const Allocator&) [with Block = long unsigned int, Allocator = std::allocator<long unsigned int>]':
foo.cc:4:   instantiated from here
/usr/local/include/boost/dynamic_bitset/dynamic_bitset.hpp:541: warning: comparison between `enum boost::dynamic_bitset<long unsigned int, std::allocator<long unsigned int> >::<anonymous>' and `enum boost::dynamic_bitset<long unsigned int, std::allocator<long unsigned int> >::<anonymous>'
foo.cc:4:   instantiated from here
/usr/local/include/boost/dynamic_bitset/dynamic_bitset.hpp:548: error: no matching function for call to `make_non_const(boost::dynamic_bitset<long unsigned int, std::allocator<long unsigned int> >::<anonymous enum>)'

>Fix:

*** ./bsd.hpp-orig      Wed Jan 26 15:29:17 2005
--- ./bsd.hpp   Wed Jan 26 16:17:59 2005
***************
*** 52,59 ****
  #  define BOOST_NO_CWCTYPE
  #endif

- #define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
-
  //
  // The BSD <ctype.h> has macros only, no functions:
  //
--- 52,57 ----

Not defining BOOST_NO_INCLASS_MEMBER_INITIALIZATION produces standard
code.  This #define shouldn't be required on compilers that follow
standards.  I don't know if this definition was necessary on older
versions of GCC.


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200501262208.j0QM8xTr021520>