https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80891
--- Comment #9 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- 5) % cat test.ii struct __normal_iterator get(); namespace boost { template <class> void get(); struct A { A(int); }; enum problem_selector { subgraph_iso }; template <typename, typename, typename, typename, typename SubGraphIsoMapCallback, problem_selector> struct B { B(A, A, int, int, int, int); void m_fn1(SubGraphIsoMapCallback p1) { __normal_iterator __trans_tmp_1(); p1(__trans_tmp_1, 0); } }; template <typename Graph1, typename Graph2, typename IndexMap1, typename IndexMap2, typename VertexOrder1, typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate, typename SubGraphIsoMapCallback, problem_selector problem_selection> void match( Graph1, Graph2, SubGraphIsoMapCallback p3, VertexOrder1, B<IndexMap1, IndexMap2, EdgeEquivalencePredicate, VertexEquivalencePredicate, SubGraphIsoMapCallback, problem_selection> p5) { p5.m_fn1(p3); } template <problem_selector problem_selection, typename GraphSmall, typename GraphLarge, typename IndexMapSmall, typename IndexMapLarge, typename VertexOrderSmall, typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate, typename SubGraphIsoMapCallback> void vf2_subgraph_morphism(GraphSmall, GraphLarge, SubGraphIsoMapCallback p3, IndexMapSmall, IndexMapLarge, VertexOrderSmall, EdgeEquivalencePredicate, VertexEquivalencePredicate) { B<IndexMapSmall, IndexMapLarge, EdgeEquivalencePredicate, VertexEquivalencePredicate, SubGraphIsoMapCallback, problem_selection> s(0, 0, 0, 0, 0, 0); match(0, 0, p3, 0, s); } template <typename GraphSmall, typename GraphLarge, typename IndexMapSmall, typename IndexMapLarge, typename VertexOrderSmall, typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate, typename SubGraphIsoMapCallback> int vf2_subgraph_iso(GraphSmall, GraphLarge, SubGraphIsoMapCallback p3, IndexMapSmall, IndexMapLarge, VertexOrderSmall, EdgeEquivalencePredicate, VertexEquivalencePredicate) { vf2_subgraph_morphism<subgraph_iso>(0, 0, p3, 0, 0, 0, 0, 0); } } using namespace boost; struct C { C(int) : graph1_(0), graph2_(0) {} template <typename CorrespondenceMap1To2, typename CorrespondenceMap2To1> void operator()(CorrespondenceMap1To2 p1, CorrespondenceMap2To1) { get(p1); } A graph1_; A graph2_; }; template <typename> void get(); void test_vf2_sub_graph_iso() { C a(vf2_subgraph_iso(0, 0, a, 0, 0, 0, 0, 0)); } % g++ -c test.ii test.ii: In instantiation of ‘void C::operator()(CorrespondenceMap1To2, CorrespondenceMap2To1) [with CorrespondenceMap1To2 = __normal_iterator (*)(); CorrespondenceMap2To1 = int]’: test.ii:14:7: required from ‘void boost::B< <template-parameter-1-1>, <template-parameter-1-2>, <template-parameter-1-3>, <template-parameter-1-4>, SubGraphIsoMapCallback, <anonymous> >::m_fn1(SubGraphIsoMapCallback) [with <template-parameter-1-1> = int; <template-parameter-1-2> = int; <template-parameter-1-3> = int; <template-parameter-1-4> = int; SubGraphIsoMapCallback = C; boost::problem_selector <anonymous> = (boost::problem_selector)0]’ test.ii:27:3: required from ‘void boost::match(Graph1, Graph2, SubGraphIsoMapCallback, VertexOrder1, boost::B<IndexMap1, IndexMap2, EdgeEquivalencePredicate, VertexEquivalencePredicate, SubGraphIsoMapCallback, problem_selection>) [with Graph1 = int; Graph2 = int; IndexMap1 = int; IndexMap2 = int; VertexOrder1 = int; EdgeEquivalencePredicate = int; VertexEquivalencePredicate = int; SubGraphIsoMapCallback = C; boost::problem_selector problem_selection = (boost::problem_selector)0]’ test.ii:40:8: required from ‘void boost::vf2_subgraph_morphism(GraphSmall, GraphLarge, SubGraphIsoMapCallback, IndexMapSmall, IndexMapLarge, VertexOrderSmall, EdgeEquivalencePredicate, VertexEquivalencePredicate) [with boost::problem_selector problem_selection = (boost::problem_selector)0; GraphSmall = int; GraphLarge = int; IndexMapSmall = int; IndexMapLarge = int; VertexOrderSmall = int; EdgeEquivalencePredicate = int; VertexEquivalencePredicate = int; SubGraphIsoMapCallback = C]’ test.ii:49:38: required from ‘int boost::vf2_subgraph_iso(GraphSmall, GraphLarge, SubGraphIsoMapCallback, IndexMapSmall, IndexMapLarge, VertexOrderSmall, EdgeEquivalencePredicate, VertexEquivalencePredicate) [with GraphSmall = int; GraphLarge = int; IndexMapSmall = int; IndexMapLarge = int; VertexOrderSmall = int; EdgeEquivalencePredicate = int; VertexEquivalencePredicate = int; SubGraphIsoMapCallback = C]’ test.ii:63:76: required from here test.ii:57:8: internal compiler error: in ovl_copy, at cp/tree.c:2142 get(p1); ~~~^~~~ 0x1046555b ovl_copy ../../gcc/gcc/cp/tree.c:2142 0x1046c67b lookup_maybe_add(tree_node*, tree_node*) ../../gcc/gcc/cp/tree.c:2384 0x1032250b name_lookup::add_fns(tree_node*) ../../gcc/gcc/cp/name-lookup.c:707 0x1032292b name_lookup::adl_namespace(tree_node*) ../../gcc/gcc/cp/name-lookup.c:732 0x1032292b name_lookup::adl_class_only(tree_node*) ../../gcc/gcc/cp/name-lookup.c:758 0x10322cd3 name_lookup::adl_bases(tree_node*) ../../gcc/gcc/cp/name-lookup.c:792 0x1032329f name_lookup::adl_class(tree_node*) ../../gcc/gcc/cp/name-lookup.c:835 0x10324223 name_lookup::search_adl(tree_node*, vec<tree_node*, va_gc, vl_embed>*) ../../gcc/gcc/cp/name-lookup.c:1019 0x1032433b lookup_arg_dependent(tree_node*, tree_node*, vec<tree_node*, va_gc, vl_embed>*) ../../gcc/gcc/cp/name-lookup.c:1044 0x1043d093 perform_koenig_lookup(cp_expr, vec<tree_node*, va_gc, vl_embed>*, int) ../../gcc/gcc/cp/semantics.c:2270 0x103d9e23 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/gcc/cp/pt.c:17253 0x103c82f7 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/gcc/cp/pt.c:16514 0x103c88e7 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/gcc/cp/pt.c:15778 0x103c933f tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/gcc/cp/pt.c:15991 0x103c5397 instantiate_decl(tree_node*, bool, bool) ../../gcc/gcc/cp/pt.c:22958 0x1040f993 instantiate_pending_templates(int) ../../gcc/gcc/cp/pt.c:23079 0x102b162b c_parse_final_cleanups() ../../gcc/gcc/cp/decl2.c:4519 0x10522c43 c_common_parse_file() ../../gcc/gcc/c-family/c-opts.c:1126