1 // RUN: %clang_cc1 -std=c++2a -triple x86_64-elf-gnu %s -emit-llvm -o - | FileCheck %s 2 3 struct S { 4 consteval void operator()() {} 5 }; 6 7 template <class Fn> 8 constexpr void dispatch(Fn fn) { 9 fn(); 10 } 11 12 template <class Visitor> 13 struct value_visitor { 14 constexpr void operator()() { visitor(); } 15 Visitor&& visitor; 16 }; 17 18 template <class Visitor> 19 constexpr auto make_dispatch() { 20 return dispatch<value_visitor<S>>; 21 } 22 23 template <class Visitor> 24 constexpr void visit(Visitor&&) { 25 make_dispatch<Visitor>(); 26 } 27 28 void f() { visit(S{}); } 29 30 // CHECK: define {{.*}} @_Z1fv 31 // CHECK-NOT: define {{.*}} @_Z5visitI1SEvOT_ 32 // CHECK-NOT: define {{.*}} @_Z13make_dispatchI1SEDav 33