2 template <typename T
> struct Quux
{};
5 using FuncPtr
= detail::Quux
<double> (*(*)(int))(float);
8 template <typename T
> void foo(T arg
) const noexcept(true) {}
10 template <int T
> void operator<<(int) {}
12 template <typename T
> FuncPtr
returns_func_ptr(detail::Quux
<int> &&) const noexcept(false) { return nullptr; }
16 template <typename T
> int foo(char const *str
) noexcept(false) { return 0; }
17 template <typename T
> int foo(T t
) { return 1; }
19 template <typename T
> FuncPtr
returns_func_ptr(detail::Quux
<int> &&) { return nullptr; }
22 int bar() { return 1; }
25 int anon_bar() { return 1; }
26 auto anon_lambda
= [] {};
30 ns::foo
<decltype(bar
)>(bar
);
31 ns::foo
<decltype(bar
)>("bar");
34 ns::foo
<decltype(&Foo::foo
<int(int)>)>("method");
35 ns::returns_func_ptr
<int>(detail::Quux
<int>{});
38 f
.operator<< <(2 > 1)>(0);
39 f
.returns_func_ptr
<int>(detail::Quux
<int>{});