In the testcase the assert fails because we use one member function from
another while we're in the middle of instantiating them all, which is
perfectly fine. It seems complicated to detect this situation, so let's
remove the assert again.
PR c++/109658
This reverts commit
95d4c0d2e6318aef88ba0bc607dfc1ec6b7a612f.
gcc/testsuite/ChangeLog:
* g++.dg/template/local10.C: New test.
pattern_defined = ! DECL_EXTERNAL (code_pattern);
}
- /* Any local class members should be instantiated from the TAG_DEFN
- with defer_ok == 0. */
- gcc_checking_assert (!defer_ok || !pattern_defined
- || !decl_function_context (d)
- || LAMBDA_TYPE_P (DECL_CONTEXT (d)));
-
/* We may be in the middle of deferred access check. Disable it now. */
push_deferring_access_checks (dk_no_deferred);
--- /dev/null
+// PR c++/109658
+
+template <typename OutputStream> void encode(OutputStream, int *) {
+ struct ValueBaseVisitor {
+ void visit() { encodeString(); }
+ void encodeString() {}
+ };
+}
+int encode_json;
+void encode_out() { encode(encode_out, &encode_json); }