--- /dev/null
+// { dg-do compile }
+// { dg-options "-O2 -w -std=c++11" }
+
+using int32 = int;
+int ShortestPath_distance;
+struct FloatWeightTpl {
+ FloatWeightTpl(float f) : value_(f) {}
+ float Value() { return value_; }
+ float value_;
+};
+template <class T> bool operator!=(FloatWeightTpl w1, T w2) {
+ bool __trans_tmp_2;
+ FloatWeightTpl __trans_tmp_3 = w1;
+ __trans_tmp_2 = __trans_tmp_3.Value() == w2.Value();
+ return __trans_tmp_2;
+}
+struct TropicalWeightTpl : FloatWeightTpl {
+ TropicalWeightTpl(float f) : FloatWeightTpl(f) {}
+ static TropicalWeightTpl Zero();
+ static TropicalWeightTpl NoWeight() {
+ float __trans_tmp_5 = __builtin_nanf("");
+ return __trans_tmp_5;
+ }
+ bool Member() { return value_; }
+};
+TropicalWeightTpl Plus(TropicalWeightTpl w1, TropicalWeightTpl &w2) {
+ return w1.Member() || w2.Member() ? TropicalWeightTpl::NoWeight() : w2.Value() ? : w2;
+}
+TropicalWeightTpl Times();
+struct ArcTpl {
+ using Weight = TropicalWeightTpl;
+};
+template <class, class, class> struct ShortestPathOptions {
+ ShortestPathOptions(int, int, int32, bool, bool);
+};
+template <class Arc, class Queue, class ArcFilter>
+void SingleShortestPath(ShortestPathOptions<Arc, Queue, ArcFilter>) {
+ using Weight = typename Arc::Weight;
+ auto f_distance = Weight::Zero();
+ while (!0) {
+ TropicalWeightTpl __trans_tmp_1 = Times(),
+ plus = Plus(f_distance, __trans_tmp_1);
+ if (f_distance != plus)
+ f_distance = plus;
+ }
+}
+template <class Arc, class Queue, class ArcFilter>
+void ShortestPath(int, int *, int *,
+ ShortestPathOptions<Arc, Queue, ArcFilter> opts) {
+ SingleShortestPath(opts);
+}
+struct ShortestDistanceOptions {
+ float delta;
+};
+struct Trans_NS_script_ShortestPathOptions : ShortestDistanceOptions {
+ int32 nshortest;
+ bool unique;
+};
+namespace internal {
+template <class, class>
+void ShortestPath(int ifst, int *ofst, int *distance,
+ Trans_NS_script_ShortestPathOptions opts) {
+ using ArcFilter = int;
+ ShortestPathOptions<ArcTpl, int, ArcFilter> sopts(opts.nshortest, opts.unique,
+ false, opts.delta, 0);
+ ShortestPath(ifst, ofst, distance, sopts);
+}
+int ShortestPath_ifst;
+int ShortestPath_ofst;
+Trans_NS_script_ShortestPathOptions ShortestPath_opts;
+void ShortestPath() {
+ using StateId = int;
+ ShortestPath<ArcTpl, StateId>(ShortestPath_ifst, &ShortestPath_ofst,
+ &ShortestPath_distance, ShortestPath_opts);
+}
+} // namespace internal