$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r80965 - in trunk/boost/geometry: algorithms algorithms/detail/overlay multi/algorithms
From: bruno.lalande_at_[hidden]
Date: 2012-10-11 18:54:50
Author: bruno.lalande
Date: 2012-10-11 18:54:47 EDT (Thu, 11 Oct 2012)
New Revision: 80965
URL: http://svn.boost.org/trac/boost/changeset/80965
Log:
Defaulted various template parameters in dispatch::intersection_insert.
Text files modified: 
   trunk/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp |   179 ++++++++++++++++++--------------------- 
   trunk/boost/geometry/algorithms/difference.hpp                         |    13 --                                      
   trunk/boost/geometry/algorithms/intersection.hpp                       |    10 --                                      
   trunk/boost/geometry/algorithms/sym_difference.hpp                     |    25 +----                                   
   trunk/boost/geometry/multi/algorithms/intersection.hpp                 |    96 ++++++++++----------                    
   5 files changed, 141 insertions(+), 182 deletions(-)
Modified: trunk/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp
==============================================================================
--- trunk/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp	(original)
+++ trunk/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp	2012-10-11 18:54:47 EDT (Thu, 11 Oct 2012)
@@ -223,16 +223,22 @@
 
 template
 <
-    // tag dispatching:
-    typename TagIn1, typename TagIn2, typename TagOut,
-    // orientation
-    // metafunction finetuning helpers:
-    bool Areal1, bool Areal2, bool ArealOut,
     // real types
     typename Geometry1, typename Geometry2,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    // orientation
+    bool Reverse1 = detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
+    bool Reverse2 = detail::overlay::do_reverse<geometry::point_order<Geometry2>::value>::value,
+    bool ReverseOut = detail::overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value,
+    // tag dispatching:
+    typename TagIn1 = typename geometry::tag<Geometry1>::type,
+    typename TagIn2 = typename geometry::tag<Geometry2>::type,
+    typename TagOut = typename geometry::tag<GeometryOut>::type,
+    // metafunction finetuning helpers:
+    bool Areal1 = geometry::is_areal<Geometry1>::value,
+    bool Areal2 = geometry::is_areal<Geometry2>::value,
+    bool ArealOut = geometry::is_areal<GeometryOut>::value
 >
 struct intersection_insert
 {
@@ -246,20 +252,20 @@
 
 template
 <
-    typename TagIn1, typename TagIn2, typename TagOut,
     typename Geometry1, typename Geometry2,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool Reverse1, bool Reverse2, bool ReverseOut,
+    typename TagIn1, typename TagIn2, typename TagOut
 >
 struct intersection_insert
     <
-        TagIn1, TagIn2, TagOut,
-        true, true, true,
         Geometry1, Geometry2,
-        Reverse1, Reverse2, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        Reverse1, Reverse2, ReverseOut,
+        TagIn1, TagIn2, TagOut,
+        true, true, true
     > : detail::overlay::overlay
         <Geometry1, Geometry2, Reverse1, Reverse2, ReverseOut, GeometryOut, OverlayType>
 {};
@@ -268,20 +274,20 @@
 // Any areal type with box:
 template
 <
-    typename TagIn, typename TagOut,
     typename Geometry, typename Box,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool Reverse1, bool Reverse2, bool ReverseOut,
+    typename TagIn, typename TagOut
 >
 struct intersection_insert
     <
-        TagIn, box_tag, TagOut,
-        true, true, true,
         Geometry, Box,
-        Reverse1, Reverse2, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        Reverse1, Reverse2, ReverseOut,
+        TagIn, box_tag, TagOut,
+        true, true, true
     > : detail::overlay::overlay
         <Geometry, Box, Reverse1, Reverse2, ReverseOut, GeometryOut, OverlayType>
 {};
@@ -290,18 +296,18 @@
 template
 <
     typename Segment1, typename Segment2,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool Reverse1, bool Reverse2, bool ReverseOut
 >
 struct intersection_insert
     <
-        segment_tag, segment_tag, point_tag,
-        false, false, false,
         Segment1, Segment2,
-        Reverse1, Reverse2, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        Reverse1, Reverse2, ReverseOut,
+        segment_tag, segment_tag, point_tag,
+        false, false, false
     > : detail::intersection::intersection_segment_segment_point<GeometryOut>
 {};
 
@@ -309,18 +315,18 @@
 template
 <
     typename Linestring1, typename Linestring2,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool Reverse1, bool Reverse2, bool ReverseOut
 >
 struct intersection_insert
     <
-        linestring_tag, linestring_tag, point_tag,
-        false, false, false,
         Linestring1, Linestring2,
-        Reverse1, Reverse2, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        Reverse1, Reverse2, ReverseOut,
+        linestring_tag, linestring_tag, point_tag,
+        false, false, false
     > : detail::intersection::intersection_linestring_linestring_point<GeometryOut>
 {};
 
@@ -328,18 +334,18 @@
 template
 <
     typename Linestring, typename Box,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool Reverse1, bool Reverse2, bool ReverseOut
 >
 struct intersection_insert
     <
-        linestring_tag, box_tag, linestring_tag,
-        false, true, false,
         Linestring, Box,
-        Reverse1, Reverse2, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        Reverse1, Reverse2, ReverseOut,
+        linestring_tag, box_tag, linestring_tag,
+        false, true, false
     >
 {
     template <typename OutputIterator, typename Strategy>
@@ -357,18 +363,18 @@
 template
 <
     typename Linestring, typename Polygon,
-    bool ReverseLinestring, bool ReversePolygon, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool ReverseLinestring, bool ReversePolygon, bool ReverseOut
 >
 struct intersection_insert
     <
-        linestring_tag, polygon_tag, linestring_tag,
-        false, true, false,
         Linestring, Polygon,
-        ReverseLinestring, ReversePolygon, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        ReverseLinestring, ReversePolygon, ReverseOut,
+        linestring_tag, polygon_tag, linestring_tag,
+        false, true, false
     > : detail::intersection::intersection_of_linestring_with_areal
             <
                 ReversePolygon,
@@ -381,18 +387,18 @@
 template
 <
     typename Linestring, typename Ring,
-    bool ReverseLinestring, bool ReverseRing, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool ReverseLinestring, bool ReverseRing, bool ReverseOut
 >
 struct intersection_insert
     <
-        linestring_tag, ring_tag, linestring_tag,
-        false, true, false,
         Linestring, Ring,
-        ReverseLinestring, ReverseRing, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        ReverseLinestring, ReverseRing, ReverseOut,
+        linestring_tag, ring_tag, linestring_tag,
+        false, true, false
     > : detail::intersection::intersection_of_linestring_with_areal
             <
                 ReverseRing,
@@ -404,18 +410,18 @@
 template
 <
     typename Segment, typename Box,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool Reverse1, bool Reverse2, bool ReverseOut
 >
 struct intersection_insert
     <
-        segment_tag, box_tag, linestring_tag,
-        false, true, false,
         Segment, Box,
-        Reverse1, Reverse2, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        Reverse1, Reverse2, ReverseOut,
+        segment_tag, box_tag, linestring_tag,
+        false, true, false
     >
 {
     template <typename OutputIterator, typename Strategy>
@@ -433,21 +439,21 @@
 
 template
 <
-    typename Tag1, typename Tag2,
-    bool Areal1, bool Areal2,
     typename Geometry1, typename Geometry2,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
     typename PointOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool Reverse1, bool Reverse2, bool ReverseOut,
+    typename Tag1, typename Tag2,
+    bool Areal1, bool Areal2
 >
 struct intersection_insert
     <
-        Tag1, Tag2, point_tag,
-        Areal1, Areal2, false,
         Geometry1, Geometry2,
-        Reverse1, Reverse2, ReverseOut,
         PointOut,
-        OverlayType
+        OverlayType,
+        Reverse1, Reverse2, ReverseOut,
+        Tag1, Tag2, point_tag,
+        Areal1, Areal2, false
     >
 {
     template <typename OutputIterator, typename Strategy>
@@ -476,12 +482,9 @@
 
 template
 <
-    typename GeometryTag1, typename GeometryTag2, typename GeometryTag3,
-    bool Areal1, bool Areal2, bool ArealOut,
-    typename Geometry1, typename Geometry2,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
-    typename GeometryOut,
-    overlay_type OverlayType
+    typename Geometry1, typename Geometry2, typename GeometryOut,
+    overlay_type OverlayType,
+    bool Reverse1, bool Reverse2, bool ReverseOut
 >
 struct intersection_insert_reversed
 {
@@ -492,12 +495,9 @@
     {
         return intersection_insert
             <
-                GeometryTag2, GeometryTag1, GeometryTag3,
-                Areal2, Areal1, ArealOut,
-                Geometry2, Geometry1,
-                Reverse2, Reverse1, ReverseOut,
-                GeometryOut,
-                OverlayType
+                Geometry2, Geometry1, GeometryOut,
+                OverlayType,
+                Reverse2, Reverse1, ReverseOut
             >::apply(g2, g1, out, strategy);
     }
 };
@@ -532,33 +532,20 @@
             geometry::reverse_dispatch<Geometry1, Geometry2>::type::value,
             geometry::dispatch::intersection_insert_reversed
             <
-                typename geometry::tag<Geometry1>::type,
-                typename geometry::tag<Geometry2>::type,
-                typename geometry::tag<GeometryOut>::type,
-                geometry::is_areal<Geometry1>::value,
-                geometry::is_areal<Geometry2>::value,
-                geometry::is_areal<GeometryOut>::value,
                 Geometry1, Geometry2,
+                GeometryOut,
+                OverlayType,
                 overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
                 overlay::do_reverse<geometry::point_order<Geometry2>::value, ReverseSecond>::value,
-                overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value,
-                GeometryOut,
-                OverlayType
+                overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value
             >,
             geometry::dispatch::intersection_insert
             <
-                typename geometry::tag<Geometry1>::type,
-                typename geometry::tag<Geometry2>::type,
-                typename geometry::tag<GeometryOut>::type,
-                geometry::is_areal<Geometry1>::value,
-                geometry::is_areal<Geometry2>::value,
-                geometry::is_areal<GeometryOut>::value,
                 Geometry1, Geometry2,
-                geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
-                geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, ReverseSecond>::value,
-                geometry::detail::overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value,
                 GeometryOut,
-                OverlayType
+                OverlayType,
+                geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
+                geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, ReverseSecond>::value
             >
         >::type::apply(geometry1, geometry2, out, strategy);
 }
Modified: trunk/boost/geometry/algorithms/difference.hpp
==============================================================================
--- trunk/boost/geometry/algorithms/difference.hpp	(original)
+++ trunk/boost/geometry/algorithms/difference.hpp	2012-10-11 18:54:47 EDT (Thu, 11 Oct 2012)
@@ -56,18 +56,11 @@
     
     return geometry::dispatch::intersection_insert
         <
-            typename geometry::tag<Geometry1>::type,
-            typename geometry::tag<Geometry2>::type,
-            typename geometry::tag<GeometryOut>::type,
-            geometry::is_areal<Geometry1>::value,
-            geometry::is_areal<Geometry2>::value,
-            geometry::is_areal<GeometryOut>::value,
             Geometry1, Geometry2,
-            geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
-            geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, true>::value,
-            geometry::detail::overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value,
             GeometryOut,
-            overlay_difference
+            overlay_difference,
+            geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
+            geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, true>::value
         >::apply(geometry1, geometry2, out, strategy);
 }
 
Modified: trunk/boost/geometry/algorithms/intersection.hpp
==============================================================================
--- trunk/boost/geometry/algorithms/intersection.hpp	(original)
+++ trunk/boost/geometry/algorithms/intersection.hpp	2012-10-11 18:54:47 EDT (Thu, 11 Oct 2012)
@@ -98,15 +98,7 @@
 
         intersection_insert
         <
-            Tag1, Tag2, typename geometry::tag<OneOut>::type,
-            geometry::is_areal<Geometry1>::value,
-            geometry::is_areal<Geometry2>::value,
-            geometry::is_areal<OneOut>::value,
-            Geometry1, Geometry2,
-            detail::overlay::do_reverse<geometry::point_order<Geometry1>::value, false>::value,
-            detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, false>::value,
-            detail::overlay::do_reverse<geometry::point_order<OneOut>::value>::value,
-            OneOut,
+            Geometry1, Geometry2, OneOut,
             overlay_intersection
         >::apply(geometry1, geometry2, std::back_inserter(geometry_out), strategy);
 
Modified: trunk/boost/geometry/algorithms/sym_difference.hpp
==============================================================================
--- trunk/boost/geometry/algorithms/sym_difference.hpp	(original)
+++ trunk/boost/geometry/algorithms/sym_difference.hpp	2012-10-11 18:54:47 EDT (Thu, 11 Oct 2012)
@@ -59,33 +59,20 @@
 
     out = geometry::dispatch::intersection_insert
         <
-            typename geometry::tag<Geometry1>::type,
-            typename geometry::tag<Geometry2>::type,
-            typename geometry::tag<GeometryOut>::type,
-            geometry::is_areal<Geometry1>::value,
-            geometry::is_areal<Geometry2>::value,
-            geometry::is_areal<GeometryOut>::value,
             Geometry1, Geometry2,
-            geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
-            geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, true>::value,
-            geometry::detail::overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value,
             GeometryOut,
-            overlay_difference
+            overlay_difference,
+            geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
+            geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, true>::value
         >::apply(geometry1, geometry2, out, strategy);
     out = geometry::dispatch::intersection_insert
         <
-            typename geometry::tag<Geometry2>::type,
-            typename geometry::tag<Geometry1>::type,
-            typename geometry::tag<GeometryOut>::type,
-            geometry::is_areal<Geometry2>::value,
-            geometry::is_areal<Geometry1>::value,
-            geometry::is_areal<GeometryOut>::value,
             Geometry2, Geometry1,
+            GeometryOut,
+            overlay_difference,
             geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value>::value,
             geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value, true>::value,
-            geometry::detail::overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value,
-            GeometryOut,
-            overlay_difference
+            geometry::detail::overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value
         >::apply(geometry2, geometry1, out, strategy);
     return out;
 }
Modified: trunk/boost/geometry/multi/algorithms/intersection.hpp
==============================================================================
--- trunk/boost/geometry/multi/algorithms/intersection.hpp	(original)
+++ trunk/boost/geometry/multi/algorithms/intersection.hpp	2012-10-11 18:54:47 EDT (Thu, 11 Oct 2012)
@@ -204,18 +204,18 @@
 template
 <
     typename MultiLinestring1, typename MultiLinestring2,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool Reverse1, bool Reverse2, bool ReverseOut
 >
 struct intersection_insert
     <
-        multi_linestring_tag, multi_linestring_tag, point_tag,
-        false, false, false,
         MultiLinestring1, MultiLinestring2,
-        Reverse1, Reverse2, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        Reverse1, Reverse2, ReverseOut,
+        multi_linestring_tag, multi_linestring_tag, point_tag,
+        false, false, false
     > : detail::intersection::intersection_multi_linestring_multi_linestring_point
             <
                 GeometryOut
@@ -227,17 +227,17 @@
 <
     typename Linestring, typename MultiLinestring,
     typename GeometryOut,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool Reverse1, bool Reverse2, bool ReverseOut
 >
 struct intersection_insert
     <
-        linestring_tag, multi_linestring_tag, point_tag,
-        false, false, false,
         Linestring, MultiLinestring,
-        Reverse1, Reverse2, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        Reverse1, Reverse2, ReverseOut,
+        linestring_tag, multi_linestring_tag, point_tag,
+        false, false, false
     > : detail::intersection::intersection_linestring_multi_linestring_point
             <
                 GeometryOut
@@ -248,18 +248,18 @@
 template
 <
     typename MultiLinestring, typename Box,
-    bool Reverse1, bool Reverse2, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool Reverse1, bool Reverse2, bool ReverseOut
 >
 struct intersection_insert
     <
-        multi_linestring_tag, box_tag, linestring_tag,
-        false, true, false,
         MultiLinestring, Box,
-        Reverse1, Reverse2, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        Reverse1, Reverse2, ReverseOut,
+        multi_linestring_tag, box_tag, linestring_tag,
+        false, true, false
     > : detail::intersection::clip_multi_linestring
             <
                 GeometryOut
@@ -270,18 +270,18 @@
 template
 <
     typename Linestring, typename MultiPolygon,
-    bool ReverseLinestring, bool ReverseMultiPolygon, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool ReverseLinestring, bool ReverseMultiPolygon, bool ReverseOut
 >
 struct intersection_insert
     <
-        linestring_tag, multi_polygon_tag, linestring_tag,
-        false, true, false,
         Linestring, MultiPolygon,
-        ReverseLinestring, ReverseMultiPolygon, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        ReverseLinestring, ReverseMultiPolygon, ReverseOut,
+        linestring_tag, multi_polygon_tag, linestring_tag,
+        false, true, false
     > : detail::intersection::intersection_of_linestring_with_areal
             <
                 ReverseMultiPolygon,
@@ -296,18 +296,18 @@
 template
 <
     typename Polygon, typename MultiLinestring,
-    bool ReversePolygon, bool ReverseMultiLinestring, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool ReversePolygon, bool ReverseMultiLinestring, bool ReverseOut
 >
 struct intersection_insert
     <
-        polygon_tag, multi_linestring_tag, linestring_tag,
-        true, false, false,
         Polygon, MultiLinestring,
-        ReversePolygon, ReverseMultiLinestring, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        ReversePolygon, ReverseMultiLinestring, ReverseOut,
+        polygon_tag, multi_linestring_tag, linestring_tag,
+        true, false, false
     > : detail::intersection::intersection_of_areal_with_multi_linestring
             <
                 ReversePolygon,
@@ -320,18 +320,18 @@
 template
 <
     typename MultiLinestring, typename Ring,
-    bool ReverseMultiLinestring, bool ReverseRing, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool ReverseMultiLinestring, bool ReverseRing, bool ReverseOut
 >
 struct intersection_insert
     <
-        multi_linestring_tag, ring_tag, linestring_tag,
-        false, true, false,
         MultiLinestring, Ring,
-        ReverseMultiLinestring, ReverseRing, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        ReverseMultiLinestring, ReverseRing, ReverseOut,
+        multi_linestring_tag, ring_tag, linestring_tag,
+        false, true, false
     > : detail::intersection::intersection_of_multi_linestring_with_areal
             <
                 ReverseRing,
@@ -343,18 +343,18 @@
 template
 <
     typename MultiLinestring, typename Polygon,
-    bool ReverseMultiLinestring, bool ReverseRing, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool ReverseMultiLinestring, bool ReverseRing, bool ReverseOut
 >
 struct intersection_insert
     <
-        multi_linestring_tag, polygon_tag, linestring_tag,
-        false, true, false,
         MultiLinestring, Polygon,
-        ReverseMultiLinestring, ReverseRing, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        ReverseMultiLinestring, ReverseRing, ReverseOut,
+        multi_linestring_tag, polygon_tag, linestring_tag,
+        false, true, false
     > : detail::intersection::intersection_of_multi_linestring_with_areal
             <
                 ReverseRing,
@@ -368,18 +368,18 @@
 template
 <
     typename MultiLinestring, typename MultiPolygon,
-    bool ReverseMultiLinestring, bool ReverseMultiPolygon, bool ReverseOut,
     typename GeometryOut,
-    overlay_type OverlayType
+    overlay_type OverlayType,
+    bool ReverseMultiLinestring, bool ReverseMultiPolygon, bool ReverseOut
 >
 struct intersection_insert
     <
-        multi_linestring_tag, multi_polygon_tag, linestring_tag,
-        false, true, false,
         MultiLinestring, MultiPolygon,
-        ReverseMultiLinestring, ReverseMultiPolygon, ReverseOut,
         GeometryOut,
-        OverlayType
+        OverlayType,
+        ReverseMultiLinestring, ReverseMultiPolygon, ReverseOut,
+        multi_linestring_tag, multi_polygon_tag, linestring_tag,
+        false, true, false
     > : detail::intersection::intersection_of_multi_linestring_with_areal
             <
                 ReverseMultiPolygon,