1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
// 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
|