blob: cad76879f08624b027b791504c37ab0883d7e3cf [file] [log] [blame]
// 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