Skip to content

Commit fe7a598

Browse files
author
Cameron Custer
committed
revert deducing this in member-function lambdas (gcc 14/15 bug PR118291)
1 parent 92050d2 commit fe7a598

7 files changed

Lines changed: 25 additions & 24 deletions

File tree

library/trees/hld.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,24 @@ template<bool VALS_EDGES> struct HLD {
1414
int n;
1515
vi p, siz, rt, tin;
1616
HLD(auto& g): n(sz(g)), p(n), siz(n, 1), rt(n), tin(n) {
17-
auto dfs1 = [&](this auto&& dfs1, int u) -> void {
17+
auto dfs1 = [&](auto dfs1, int u) -> void {
1818
for (int& v : g[u]) {
1919
erase(g[v], p[v] = u);
20-
dfs1(v);
20+
dfs1(dfs1, v);
2121
siz[u] += siz[v];
2222
if (siz[v] > siz[g[u][0]]) swap(v, g[u][0]);
2323
}
2424
};
25-
dfs1(0);
25+
dfs1(dfs1, 0);
2626
int tim = 0;
27-
auto dfs2 = [&](this auto&& dfs2, int u) -> void {
27+
auto dfs2 = [&](auto dfs2, int u) -> void {
2828
tin[u] = tim++;
2929
for (int v : g[u]) {
3030
rt[v] = (v == g[u][0] ? rt[u] : v);
31-
dfs2(v);
31+
dfs2(dfs2, v);
3232
}
3333
};
34-
dfs2(0);
34+
dfs2(dfs2, 0);
3535
}
3636
void path(int u, int v, auto f) {
3737
for (;; v = p[rt[v]]) {

library/trees/lca_rmq.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ struct LCA {
1616
LCA(const auto& g):
1717
n(sz(g)), tin(n), siz(n, 1), d(n), p(n) {
1818
vi order;
19-
auto dfs = [&](this auto&& dfs, int u) -> void {
19+
auto dfs = [&](auto&& dfs, int u) -> void {
2020
tin[u] = sz(order), order.push_back(u);
2121
for (int v : g[u])
2222
if (v != p[u])
23-
d[v] = d[p[v] = u] + 1, dfs(v), siz[u] += siz[v];
23+
d[v] = d[p[v] = u] + 1, dfs(dfs, v),
24+
siz[u] += siz[v];
2425
};
25-
dfs(0);
26+
dfs(dfs, 0);
2627
rmq = {order,
2728
[&](int u, int v) { return d[u] < d[v] ? u : v; }};
2829
}

library/trees/linear_lca.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ struct linear_lca {
1313
linear_lca(const auto& g):
1414
n(sz(g)), d(n), in(n), asc(n), head(n + 1) {
1515
vector<pii> order;
16-
auto dfs = [&](this auto&& dfs, int u, int p) -> void {
16+
auto dfs = [&](auto&& dfs, int u, int p) -> void {
1717
order.emplace_back(u, p), in[u] = sz(order);
1818
for (int v : g[u])
1919
if (v != p) {
2020
d[v] = 1 + d[u];
21-
dfs(v, u);
21+
dfs(dfs, v, u);
2222
head[in[v]] = u;
2323
if (lsb(in[u]) < lsb(in[v])) in[u] = in[v];
2424
}
2525
};
26-
dfs(0, 0);
26+
dfs(dfs, 0, 0);
2727
for (auto [u, p] : order) asc[u] = asc[p] | lsb(in[u]);
2828
}
2929
int lca(int u, int v) {

library/trees/tree_lift.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111
struct tree_lift {
1212
vi d, p, j;
1313
tree_lift(const auto& g): d(sz(g)), p(d), j(d) {
14-
auto dfs = [&](this auto&& dfs, int u) -> void {
14+
auto dfs = [&](auto&& dfs, int u) -> void {
1515
int up = d[u] + d[j[j[u]]] == 2 * d[j[u]] ? j[j[u]]
1616
: u;
1717
for (int v : g[u])
1818
if (v != p[u])
19-
d[v] = d[p[v] = u] + 1, j[v] = up, dfs(v);
19+
d[v] = d[p[v] = u] + 1, j[v] = up, dfs(dfs, v);
2020
};
21-
dfs(0);
21+
dfs(dfs, 0);
2222
}
2323
int kth_par(int u, int k) {
2424
int anc_d = d[u] - k;

library/trees/uncommon/hagerup_kth_par.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,22 @@ template<int K = 2> struct hagerup {
2121
jmp[t] = st[max(0, s - K * (t & -t))];
2222
t++;
2323
};
24-
auto dfs = [&](this auto&& dfs, int u, int p) -> void {
24+
auto dfs = [&](auto&& dfs, int u, int p) -> void {
2525
int& l = leaf[u] = st[d[u]] = u;
2626
pos[u] = t;
2727
calc(d[u]);
2828
for (int v : g[u])
2929
if (v != p) {
3030
d[v] = 1 + d[u];
31-
dfs(v, u);
31+
dfs(dfs, v, u);
3232
if (d[l] < d[leaf[v]]) l = leaf[v];
3333
calc(d[u]);
3434
}
3535
int s = (d[l] - d[u]) * (2 * K + 3) / K;
3636
s = min(max(s, 2 * K), d[l] + 1);
3737
rep(i, sz(lad[l]), s) lad[l].push_back(st[d[l] - i]);
3838
};
39-
dfs(0, 0);
39+
dfs(dfs, 0, 0);
4040
}
4141
int kth_par(int u, int k) {
4242
assert(0 <= k && k <= d[u]);

library/trees/uncommon/ladder_decomposition.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ struct ladder {
2020
n(sz(g)), d(n), p(n), idx(n), lad(2 * n) {
2121
int i = 0;
2222
vi st(n);
23-
auto dfs = [&](this auto&& dfs, int u) -> vi {
23+
auto dfs = [&](auto&& dfs, int u) -> vi {
2424
vi path;
2525
st[d[u]] = u;
2626
for (int v : g[u])
2727
if (v != p[u]) {
2828
d[v] = d[p[v] = u] + 1;
29-
vi x = dfs(v);
29+
vi x = dfs(dfs, v);
3030
if (sz(x) > sz(path)) swap(x, path);
3131
for (int y : x) idx[y] = i;
3232
for (int y : x) lad[i++] = y;
@@ -36,7 +36,7 @@ struct ladder {
3636
path.push_back(u);
3737
return path;
3838
};
39-
vi x = dfs(0);
39+
vi x = dfs(dfs, 0);
4040
for (int y : x) idx[y] = i;
4141
for (int y : x) lad[i++] = y;
4242
jmp = treeJump(p);

library/trees/uncommon/linear_kth_par.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ struct linear_kth_par {
2323
jmp[t] += st[du - k];
2424
d_tour[t++] = du;
2525
};
26-
auto dfs = [&](this auto&& dfs, int u, int p) -> vi {
26+
auto dfs = [&](auto&& dfs, int u, int p) -> vi {
2727
vi path;
2828
tin[st[d[u]] = u] = t;
2929
calc(d[u]);
3030
for (int v : g[u])
3131
if (v != p) {
3232
d[v] = d[u] + 1;
33-
vi x = dfs(v, u);
33+
vi x = dfs(dfs, v, u);
3434
calc(d[u]);
3535
if (sz(x) > sz(path)) swap(x, path);
3636
for (int y : x) idx[y] = i;
@@ -41,7 +41,7 @@ struct linear_kth_par {
4141
path.push_back(u);
4242
return path;
4343
};
44-
vi x = dfs(0, 0);
44+
vi x = dfs(dfs, 0, 0);
4545
for (int y : x) idx[y] = i;
4646
for (int y : x) lad[i++] = y;
4747
}

0 commit comments

Comments
 (0)