Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0b55a94

Browse files
committed
Add constexpr and boost::variant workarounds for vs2015.
1 parent f510cf2 commit 0b55a94

File tree

7 files changed

+124
-21
lines changed

7 files changed

+124
-21
lines changed

include/boost/geometry/algorithms/area_result.hpp

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
#include <boost/geometry/util/select_most_precise.hpp>
2828
#include <boost/geometry/util/sequence.hpp>
29+
#include <boost/geometry/util/type_traits.hpp>
2930

3031
#include <boost/variant/variant_fwd.hpp>
3132

@@ -51,17 +52,18 @@ struct area_result
5152
typedef typename strategy_type::template result_type<Geometry>::type type;
5253
};
5354

55+
template <typename Geometry, typename Strategy>
56+
struct area_result<Geometry, Strategy, false>
57+
{
58+
typedef typename Strategy::template result_type<Geometry>::type type;
59+
};
60+
61+
5462
template
5563
<
5664
typename Geometry,
57-
typename Strategy
65+
bool IsGeometry = util::is_geometry<Geometry>::value
5866
>
59-
struct area_result<Geometry, Strategy, false>
60-
: Strategy::template result_type<Geometry>
61-
{};
62-
63-
64-
template <typename Geometry>
6567
struct default_area_result
6668
: area_result
6769
<
@@ -73,15 +75,37 @@ struct default_area_result
7375
>
7476
{};
7577

78+
// Workaround for VS2015
79+
#if (_MSC_VER < 1910)
80+
template
81+
<
82+
typename Geometry,
83+
bool IsGeometry = util::is_geometry<Geometry>::value
84+
>
85+
struct coordinate_type
86+
: geometry::coordinate_type<Geometry>
87+
{};
88+
template <typename Geometry>
89+
struct coordinate_type<Geometry, false>
90+
{
91+
typedef int type;
92+
};
93+
template <typename Geometry>
94+
struct default_area_result<Geometry, false>
95+
{
96+
typedef int type;
97+
};
98+
#endif
99+
76100
template <typename Curr, typename Next>
77101
struct more_precise_coordinate_type
78102
: std::is_same
79103
<
80-
typename geometry::coordinate_type<Curr>::type,
104+
typename coordinate_type<Curr>::type,
81105
typename geometry::select_most_precise
82106
<
83-
typename geometry::coordinate_type<Curr>::type,
84-
typename geometry::coordinate_type<Next>::type
107+
typename coordinate_type<Curr>::type,
108+
typename coordinate_type<Next>::type
85109
>::type
86110
>
87111
{};

include/boost/geometry/arithmetic/cross_product.hpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,11 @@ template
147147
int
148148
> = 0
149149
>
150-
constexpr inline ResultP cross_product(P1 const& p1, P2 const& p2)
150+
// workaround for VS2015
151+
#if (_MSC_VER >= 1910)
152+
constexpr
153+
#endif
154+
inline ResultP cross_product(P1 const& p1, P2 const& p2)
151155
{
152156
BOOST_CONCEPT_ASSERT((concepts::Point<ResultP>));
153157
BOOST_CONCEPT_ASSERT((concepts::ConstPoint<P1>));
@@ -210,7 +214,11 @@ template
210214
int
211215
> = 0
212216
>
213-
constexpr inline P cross_product(P const& p1, P const& p2)
217+
// workaround for VS2015
218+
#if (_MSC_VER >= 1910)
219+
constexpr
220+
#endif
221+
inline P cross_product(P const& p1, P const& p2)
214222
{
215223
BOOST_CONCEPT_ASSERT((concepts::Point<P>));
216224
BOOST_CONCEPT_ASSERT((concepts::ConstPoint<P>));

include/boost/geometry/arithmetic/dot_product.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,11 @@ struct dot_product_maker<P1, P2, DimensionCount, DimensionCount>
7474
7575
*/
7676
template <typename Point1, typename Point2>
77-
constexpr inline typename select_coordinate_type<Point1, Point2>::type dot_product(
77+
// workaround for VS2015
78+
#if (_MSC_VER >= 1910)
79+
constexpr
80+
#endif
81+
inline typename select_coordinate_type<Point1, Point2>::type dot_product(
7882
Point1 const& p1, Point2 const& p2)
7983
{
8084
BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point1>) );

include/boost/geometry/geometries/point.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,13 @@ class point
9090

9191
#if !defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
9292
/// \constructor_default_no_init
93-
constexpr point() = default;
93+
constexpr point()
94+
// Workaround for VS2015
95+
#if (_MSC_VER < 1910)
96+
: m_values{} {}
97+
#else
98+
= default;
99+
#endif
94100
#else // defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
95101
point()
96102
{

include/boost/geometry/strategies/comparable_distance_result.hpp

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,21 @@
2020
#include <boost/geometry/strategies/distance.hpp>
2121
#include <boost/geometry/util/select_most_precise.hpp>
2222
#include <boost/geometry/util/sequence.hpp>
23+
#include <boost/geometry/util/type_traits.hpp>
2324

2425

2526
namespace boost { namespace geometry
2627
{
2728

2829
namespace resolve_strategy
2930
{
30-
31-
template <typename Geometry1, typename Geometry2, typename Strategy>
31+
32+
template
33+
<
34+
typename Geometry1, typename Geometry2, typename Strategy,
35+
bool AreGeometries = (util::is_geometry<Geometry1>::value
36+
&& util::is_geometry<Geometry2>::value)
37+
>
3238
struct comparable_distance_result
3339
: strategy::distance::services::return_type
3440
<
@@ -41,8 +47,8 @@ struct comparable_distance_result
4147
>
4248
{};
4349

44-
template <typename Geometry1, typename Geometry2>
45-
struct comparable_distance_result<Geometry1, Geometry2, default_strategy>
50+
template <typename Geometry1, typename Geometry2, bool AreGeometries>
51+
struct comparable_distance_result<Geometry1, Geometry2, default_strategy, AreGeometries>
4652
: comparable_distance_result
4753
<
4854
Geometry1,
@@ -54,6 +60,21 @@ struct comparable_distance_result<Geometry1, Geometry2, default_strategy>
5460
>
5561
{};
5662

63+
// Workaround for VS2015
64+
#if (_MSC_VER < 1910)
65+
template <typename Geometry1, typename Geometry2, typename Strategy>
66+
struct comparable_distance_result<Geometry1, Geometry2, Strategy, false>
67+
{
68+
typedef int type;
69+
};
70+
template <typename Geometry1, typename Geometry2>
71+
struct comparable_distance_result<Geometry1, Geometry2, default_strategy, false>
72+
{
73+
typedef int type;
74+
};
75+
#endif
76+
77+
5778
} // namespace resolve_strategy
5879

5980

include/boost/geometry/strategies/default_length_result.hpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
#include <boost/geometry/core/coordinate_type.hpp>
2626
#include <boost/geometry/util/select_most_precise.hpp>
27+
#include <boost/geometry/util/type_traits.hpp>
2728

2829

2930
namespace boost { namespace geometry
@@ -40,6 +41,23 @@ namespace resolve_strategy
4041
// default_distance_result here.
4142

4243

44+
// Workaround for VS2015
45+
#if (_MSC_VER < 1910)
46+
template
47+
<
48+
typename Geometry,
49+
bool IsGeometry = util::is_geometry<Geometry>::value
50+
>
51+
struct coordinate_type
52+
: geometry::coordinate_type<Geometry>
53+
{};
54+
template <typename Geometry>
55+
struct coordinate_type<Geometry, false>
56+
{
57+
typedef long double type;
58+
};
59+
#endif
60+
4361
template <typename ...Geometries>
4462
struct default_length_result
4563
{

include/boost/geometry/strategies/distance_result.hpp

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <boost/geometry/strategies/distance.hpp>
3131
#include <boost/geometry/util/select_most_precise.hpp>
3232
#include <boost/geometry/util/sequence.hpp>
33+
#include <boost/geometry/util/type_traits.hpp>
3334

3435
namespace boost { namespace geometry
3536
{
@@ -38,7 +39,12 @@ namespace boost { namespace geometry
3839
namespace resolve_strategy
3940
{
4041

41-
template <typename Geometry1, typename Geometry2, typename Strategy>
42+
template
43+
<
44+
typename Geometry1, typename Geometry2, typename Strategy,
45+
bool AreGeometries = (util::is_geometry<Geometry1>::value
46+
&& util::is_geometry<Geometry2>::value)
47+
>
4248
struct distance_result
4349
: strategy::distance::services::return_type
4450
<
@@ -48,8 +54,8 @@ struct distance_result
4854
>
4955
{};
5056

51-
template <typename Geometry1, typename Geometry2>
52-
struct distance_result<Geometry1, Geometry2, default_strategy>
57+
template <typename Geometry1, typename Geometry2, bool AreGeometries>
58+
struct distance_result<Geometry1, Geometry2, default_strategy, AreGeometries>
5359
: distance_result
5460
<
5561
Geometry1,
@@ -61,6 +67,22 @@ struct distance_result<Geometry1, Geometry2, default_strategy>
6167
>
6268
{};
6369

70+
71+
// Workaround for VS2015
72+
#if (_MSC_VER < 1910)
73+
template <typename Geometry1, typename Geometry2, typename Strategy>
74+
struct distance_result<Geometry1, Geometry2, Strategy, false>
75+
{
76+
typedef int type;
77+
};
78+
template <typename Geometry1, typename Geometry2>
79+
struct distance_result<Geometry1, Geometry2, default_strategy, false>
80+
{
81+
typedef int type;
82+
};
83+
#endif
84+
85+
6486
} // namespace resolve_strategy
6587

6688

0 commit comments

Comments
 (0)