|  | // RUN: %clang_cc1 -std=c++2a -triple x86_64-elf-gnu %s -emit-llvm -o - | FileCheck %s | 
|  |  | 
|  | struct S { | 
|  | consteval void operator()() {} | 
|  | }; | 
|  |  | 
|  | template <class Fn> | 
|  | constexpr void dispatch(Fn fn) { | 
|  | fn(); | 
|  | } | 
|  |  | 
|  | template <class Visitor> | 
|  | struct value_visitor { | 
|  | constexpr void operator()() { visitor(); } | 
|  | Visitor&& visitor; | 
|  | }; | 
|  |  | 
|  | template <class Visitor> | 
|  | constexpr auto make_dispatch() { | 
|  | return dispatch<value_visitor<S>>; | 
|  | } | 
|  |  | 
|  | template <class Visitor> | 
|  | constexpr void visit(Visitor&&) { | 
|  | make_dispatch<Visitor>(); | 
|  | } | 
|  |  | 
|  | void f() { visit(S{}); } | 
|  |  | 
|  | // CHECK: define {{.*}} @_Z1fv | 
|  | // CHECK-NOT: define {{.*}} @_Z5visitI1SEvOT_ | 
|  | // CHECK-NOT: define {{.*}} @_Z13make_dispatchI1SEDav |