diff --git a/.gitattributes b/.gitattributes index 11c0b0d5f5b..dd493a32c10 100644 --- a/.gitattributes +++ b/.gitattributes @@ -393,6 +393,7 @@ Coin/demo/Coin/Terrain/terrain.vcproj -text Coin/demo/Coin/Triangulation_3/triangulation_3.sln -text Coin/demo/Coin/Triangulation_3/triangulation_3.vcproj -text Configuration/config/testfiles/CGAL_CFG_DEEP_DEPENDENT_TEMPLATE_BUG.C -text +Configuration/config/testfiles/CGAL_CFG_OUTOFLINE_MEMBER_DEFINITION_BUG.C -text Configuration/config/testfiles/CGAL_CFG_SUNPRO_RWSTD.C -text Convex_hull_2/demo/Convex_hull_2/convex_hull_2.vcproj -text Convex_hull_2/doc_tex/Convex_hull_2/saarhull.eps -text diff --git a/Configuration/config/testfiles/CGAL_CFG_OUTOFLINE_MEMBER_DEFINITION_BUG.C b/Configuration/config/testfiles/CGAL_CFG_OUTOFLINE_MEMBER_DEFINITION_BUG.C new file mode 100644 index 00000000000..8233f448549 --- /dev/null +++ b/Configuration/config/testfiles/CGAL_CFG_OUTOFLINE_MEMBER_DEFINITION_BUG.C @@ -0,0 +1,54 @@ +// Copyright (c) 2004 Utrecht University (The Netherlands), +// ETH Zurich (Switzerland), Freie Universitaet Berlin (Germany), +// INRIA Sophia-Antipolis (France), Martin-Luther-University Halle-Wittenberg +// (Germany), Max-Planck-Institute Saarbruecken (Germany), RISC Linz (Austria), +// and Tel-Aviv University (Israel). All rights reserved. +// +// This file is part of CGAL (www.cgal.org); you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation; version 2.1 of the License. +// See the file LICENSE.LGPL distributed with CGAL. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/trunk/Configuration/config/testfiles/CGAL_CFG_OUTOFLINE_MEMBER_DEFINITION_BUG.C $ +// $Id: CGAL_CFG_OUTOFLINE_MEMBER_DEFINITION_BUG.C 28738 2006-02-23 14:30:13Z glisse $ +// +// +// Author(s) : Marc Glisse + +// --------------------------------------------------------------------- +// A short test program to evaluate a C++ compiler. +// This program is used by cgal_configure. +// The following documentation will be pasted in the generated configfile. +// --------------------------------------------------------------------- + +//| This flag is set if the compiler complains about an ambiguity between +//| a type and itself when some members are defined out of line. This is +//| a Sun CC bug. + +template < typename U > +struct B +{ + struct A + { + typedef char C; + }; + A* f ( typename A :: C ); +}; + +template < class U > + typename B < U > :: A* +B < U > :: f ( typename A :: C ) +{ + return 0; +} + +int main() +{ + return 0; +} diff --git a/STL_Extension/include/CGAL/Multiset.h b/STL_Extension/include/CGAL/Multiset.h index b7415eca366..9070360a7f0 100644 --- a/STL_Extension/include/CGAL/Multiset.h +++ b/STL_Extension/include/CGAL/Multiset.h @@ -1433,7 +1433,21 @@ protected: * \return A pointer to the newly created node. */ Node* _allocate_node (const Type& object, - typename Node::Node_color color); + typename Node::Node_color color) +#ifdef CGAL_CFG_OUTOFLINE_MEMBER_DEFINITION_BUG + { + CGAL_multiset_assertion (color != Node::DUMMY_BEGIN && + color != Node::DUMMY_END); + + Node* new_node = node_alloc.allocate(1); + + node_alloc.construct(new_node, beginNode); + new_node->init(object, color); + return (new_node); + } +#else + ; +#endif /*! * De-allocate a tree node. @@ -3864,6 +3878,7 @@ void Multiset::_remove_fixup (Node* nodeP, //--------------------------------------------------------- // Allocate and initialize new tree node. // +#ifndef CGAL_CFG_OUTOFLINE_MEMBER_DEFINITION_BUG template typename Multiset::Node* Multiset::_allocate_node @@ -3879,6 +3894,7 @@ Multiset::_allocate_node new_node->init(object, color); return (new_node); } +#endif //--------------------------------------------------------- // De-allocate a tree node.