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