comparison gcc/testsuite/g++.dg/torture/pr46383.C @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 // { dg-do compile }
2
3 namespace std {
4 template<class,class>struct pair{};
5 template<typename _Tp> struct _Vector_base {
6 struct _Vector_impl
7 {
8 _Tp* _M_start;
9 _Tp* _M_finish;
10 _Tp* _M_end_of_storage;
11 };
12 _Vector_impl _M_impl;
13 };
14 template<typename _Tp >
15 struct vector : _Vector_base<_Tp>
16 {
17 vector(const vector& __x);
18 };
19 }
20 namespace boost {
21 struct G{};
22 template <class T, class U >
23 struct modable2
24 : G
25 { };
26 }
27 namespace CGAL {
28 struct Rep { };
29 struct Handle
30 {
31 Handle() ;
32 Handle(const Handle& x) ;
33 Rep* PTR;
34 };
35 template <typename ET_> class Lazy_exact_nt
36 : Handle
37 , boost::modable2< Lazy_exact_nt<ET_>, int >
38 , boost::modable2< Lazy_exact_nt<ET_>, double >
39 { };
40 struct CC_iterator { };
41 struct Triangulation_data_structure_3 {
42 typedef CC_iterator Vertex_handle;
43 typedef CC_iterator Cell_handle;
44 typedef std::pair<Cell_handle, int> Facet;
45 };
46 template < class GT, class Tds_ > struct Triangulation_3 {
47 typedef Tds_ Tds;
48 typedef typename GT::Point_3 Point;
49 typedef typename Tds::Facet Facet;
50 typedef typename Tds::Vertex_handle Vertex_handle;
51 enum Locate_type { VERTEX=0, EDGE, FACET, CELL, OUTSIDE_CONVEX_HULL, OUTSIDE_AFFINE_HULL };
52 Tds _tds;
53 bool is_infinite(const Facet & f) const ;
54 };
55 template < class Gt, class Tds_ > struct Delaunay_triangulation_3 : public Triangulation_3<Gt, Tds_> { };
56 namespace Surface_mesher { enum Verbose_flag { VERBOSE, NOT_VERBOSE }; }
57 enum Mesher_level_conflict_status { NO_CONFLICT = 0, CONFLICT_BUT_ELEMENT_CAN_BE_RECONSIDERED, CONFLICT_AND_ELEMENT_SHOULD_BE_DROPPED };
58 struct Null_mesher_level {
59 template <typename P, typename Z> Mesher_level_conflict_status test_point_conflict_from_superior(P, Z) ;
60 };
61 template < class Tr, class Derived, class Element, class Previous, class Triangulation_traits > struct Mesher_level {
62 typedef Tr Triangulation;
63 typedef typename Triangulation::Point Point;
64 typedef typename Triangulation::Vertex_handle Vertex_handle;
65 typedef typename Triangulation_traits::Zone Zone;
66 typedef Previous Previous_level;
67 Derived& derived() { return static_cast<Derived&>(*this); }
68 Previous& previous_level;
69 Mesher_level(Previous_level& previous)
70 : previous_level(previous)
71 { }
72 Vertex_handle insert(Point p, Zone& z) ; // { dg-warning "used but never defined" }
73 Zone conflicts_zone(const Point& p, Element e) ; // { dg-warning "used but never defined" }
74 Element get_next_element() ; // { dg-warning "used but never defined" }
75 template <class Mesh_visitor> void before_insertion(Element& e, const Point& p, Zone& zone, Mesh_visitor visitor) {
76 visitor.before_insertion(e, p, zone);
77 }
78 template <class Mesh_visitor> void after_insertion(Vertex_handle vh, Mesh_visitor visitor) {
79 derived().after_insertion_impl(vh);
80 }
81 template <class Mesh_visitor> void after_no_insertion(const Element& e, const Point& p, Zone& zone, Mesh_visitor visitor) {
82 visitor.after_no_insertion(e, p, zone);
83 }
84 template <class Mesh_visitor> void refine(Mesh_visitor visitor)
85 {
86 Element e = get_next_element();
87 const Mesher_level_conflict_status result = try_to_refine_element(e, visitor);
88 }
89 template <class Mesh_visitor> Mesher_level_conflict_status try_to_refine_element(Element e, Mesh_visitor visitor)
90 {
91 Point p ;
92 Zone zone = conflicts_zone(p, e);
93 const Mesher_level_conflict_status result = test_point_conflict(p, zone);
94 before_insertion(e, p, zone, visitor);
95 Vertex_handle v = insert(p, zone);
96 after_insertion(v, visitor);
97 after_no_insertion(e, p, zone, visitor);
98 }
99 Mesher_level_conflict_status test_point_conflict(const Point& p, Zone& zone)
100 {
101 return previous_level.test_point_conflict_from_superior(p, zone);
102 }
103 };
104 struct Null_mesh_visitor {
105 template <typename E, typename P, typename Z> void before_insertion(E, P, Z) const {}
106 template <typename E, typename P, typename Z> void after_no_insertion(E, P, Z) const {}
107 };
108 template <class Tr> struct Triangulation_ref_impl {
109 Triangulation_ref_impl(Tr& t);
110 };
111 template <typename Tr> struct Triangulation_mesher_level_traits_3
112 : public Triangulation_ref_impl<Tr>
113 {
114 typedef typename Tr::Facet Facet;
115 Triangulation_mesher_level_traits_3(Tr& t)
116 : Triangulation_ref_impl<Tr>(t)
117 { }
118 struct Zone {
119 typedef std::vector<int*> Cells;
120 typedef std::vector<Facet> Facets;
121 typedef typename Tr::Locate_type Locate_type;
122 Locate_type locate_type;
123 Cells cells;
124 Facets boundary_facets;
125 Facets internal_facets;
126 };
127 };
128 namespace Surface_mesher {
129 namespace details {
130 template <typename Base> struct Triangulation_generator {
131 typedef typename Base::Complex_2_in_triangulation_3 C2T3;
132 typedef typename C2T3::Triangulation Triangulation;
133 typedef Triangulation Type;
134 typedef Type type;
135 };
136 template <typename Base> struct Facet_generator {
137 typedef typename Triangulation_generator<Base>::type Tr;
138 typedef typename Tr::Facet Type;
139 typedef Type type;
140 };
141 template <typename Base, typename Self, typename Element, typename PreviousLevel = Null_mesher_level> struct Mesher_level_generator {
142 typedef typename Base::Complex_2_in_triangulation_3 C2T3;
143 typedef typename C2T3::Triangulation Triangulation;
144 typedef Triangulation_mesher_level_traits_3<Triangulation> Tr_m_l_traits_3;
145 typedef Mesher_level <Triangulation, Self, Element, PreviousLevel, Tr_m_l_traits_3> Type;
146 };
147 }
148 template < class C2T3, class Surface_, class SurfaceMeshTraits, class Criteria_ > struct Surface_mesher_base
149 : public Triangulation_mesher_level_traits_3<typename C2T3::Triangulation>
150 {
151 typedef C2T3 Complex_2_in_triangulation_3;
152 typedef Surface_ Surface;
153 typedef SurfaceMeshTraits Surface_mesh_traits;
154 typedef Criteria_ Criteria;
155 typedef typename C2T3::Triangulation Tr;
156 typedef typename Tr::Vertex_handle Vertex_handle;
157 typedef typename Tr::Facet Facet;
158 Surface_mesher_base (C2T3& co, const Surface& s, const Surface_mesh_traits& mesh_traits, const Criteria& c)
159 : Triangulation_mesher_level_traits_3<Tr>(co.triangulation()), c2t3(co), tr(co.triangulation()), surf(s), meshtraits(mesh_traits), criteria(c)
160 { }
161 C2T3& c2t3;
162 Tr& tr;
163 const Surface& surf;
164 const Surface_mesh_traits& meshtraits;
165 const Criteria& criteria;
166 void after_insertion_impl(const Vertex_handle& v) {
167 after_insertion_handle_opposite_facet (Facet ());
168 after_insertion_handle_incident_facet (Facet ());
169 }
170 void after_insertion_handle_incident_facet (const Facet& f) {
171 tr.is_infinite(f) ;
172 new_facet<false>(f);
173 }
174 template <bool remove_from_complex_if_not_in_restricted_Delaunay> void new_facet (const Facet& f) ; // { dg-warning "used but never defined" }
175 void after_insertion_handle_opposite_facet (const Facet& f) {
176 after_insertion_handle_incident_facet (f);
177 }
178 };
179 template < typename Base, typename Element = typename details::Facet_generator<Base>::type, typename PreviousLevel = Null_mesher_level, Verbose_flag verbose = NOT_VERBOSE > struct Surface_mesher
180 : public Base , public details::Mesher_level_generator< Base, Surface_mesher<Base, Element, PreviousLevel, verbose>, Element, PreviousLevel >::Type
181 {
182 typedef typename Base::Complex_2_in_triangulation_3 C2T3;
183 typedef typename Base::Surface Surface;
184 typedef typename Base::Criteria Criteria;
185 typedef typename Base::Surface_mesh_traits Surface_mesh_traits;
186 typedef typename details::Mesher_level_generator< Base, Surface_mesher<Base, Element, PreviousLevel, verbose>, Element, PreviousLevel >::Type Mesher_lvl;
187 using Mesher_lvl::refine;
188 Null_mesher_level null_mesher_level;
189 Null_mesh_visitor null_visitor;
190 bool initialized;
191 Surface_mesher(C2T3& c2t3, const Surface& surface, const Surface_mesh_traits& mesh_traits, const Criteria& criteria)
192 : Base(c2t3, surface, mesh_traits, criteria), Mesher_lvl(null_mesher_level), initialized(false)
193 { }
194 void refine_mesh () {
195 refine(null_visitor);
196 }
197 };
198 }
199 template <typename Surface> struct Surface_mesh_traits_generator_3 {
200 typedef typename Surface::Surface_mesher_traits_3 Type;
201 typedef Type type;
202 };
203 template < class Tr, typename Edge_info_ = void > struct Complex_2_in_triangulation_3 {
204 typedef Tr Triangulation;
205 Triangulation& triangulation();
206 };
207 template <class Tr> struct Surface_mesh_complex_2_in_triangulation_3
208 : public Complex_2_in_triangulation_3<Tr>
209 { };
210 struct Non_manifold_tag {};
211 template < typename C2T3, typename SurfaceMeshTraits_3, typename Criteria, typename Tag > struct Make_surface_mesh_helper {
212 typedef Surface_mesher::Surface_mesher_base< C2T3, typename SurfaceMeshTraits_3::Surface_3, SurfaceMeshTraits_3, Criteria> Mesher_base;
213 };
214 template <typename C2T3, typename SurfaceMeshTraits_3, typename Criteria, typename Tag, Surface_mesher::Verbose_flag verbosity = Surface_mesher::NOT_VERBOSE > struct Surface_mesher_generator {
215 typedef typename Make_surface_mesh_helper< C2T3, SurfaceMeshTraits_3, Criteria, Tag>::Mesher_base Mesher_base;
216 typedef Surface_mesher::Surface_mesher< Mesher_base, typename Surface_mesher::details::Facet_generator<Mesher_base>::type, Null_mesher_level, verbosity> Mesher;
217 typedef Mesher type;
218 };
219 template <typename C2T3, typename SurfaceMeshTraits_3, typename Criteria> void make_surface_mesh(C2T3& c2t3, const typename SurfaceMeshTraits_3::Surface_3& surface, const SurfaceMeshTraits_3& surface_mesh_traits, const Criteria& criteria) {
220 typedef typename Surface_mesher_generator< C2T3, SurfaceMeshTraits_3, Criteria, Non_manifold_tag, Surface_mesher::NOT_VERBOSE >::type Mesher;
221 Mesher mesher(c2t3, surface, surface_mesh_traits, criteria);
222 mesher.refine_mesh();
223 }
224 template <class Kernel> struct Surface_mesh_triangulation_generator_3 {
225 typedef CGAL::Triangulation_data_structure_3 Tds;
226 typedef CGAL::Delaunay_triangulation_3<Kernel, Tds> Type;
227 };
228 namespace Surface_mesher {
229 namespace { struct Return_min { }; }
230 template < class GT, class Surface, class Unused = Return_min > struct Implicit_surface_oracle_3 {
231 typedef Surface Surface_3;
232 };
233 }
234 template< typename GT> struct Implicit_surface_3 {
235 typedef GT Geom_traits;
236 typedef Implicit_surface_3<Geom_traits > Self;
237 typedef Surface_mesher::Implicit_surface_oracle_3< Geom_traits, Self> Surface_mesher_traits_3;
238 };
239 }
240 struct K {
241 struct Point_3 {
242 CGAL::Lazy_exact_nt<double> a[3];
243 };
244 };
245 typedef CGAL::Surface_mesh_triangulation_generator_3<K>::Type Tr;
246 typedef CGAL::Surface_mesh_complex_2_in_triangulation_3<Tr> C2T3;
247 typedef CGAL::Implicit_surface_3<K > Surface;
248 typedef CGAL::Surface_mesh_traits_generator_3<Surface>::type Traits;
249 void f() {
250 C2T3 c2t3 ;
251 CGAL::make_surface_mesh(c2t3, Surface(), Traits(), 3);
252 }