1e1eabcdfSLouis Dionne //===----------------------------------------------------------------------===//
2e1eabcdfSLouis Dionne //
3e1eabcdfSLouis Dionne //                     The LLVM Compiler Infrastructure
4e1eabcdfSLouis Dionne //
5e1eabcdfSLouis Dionne // This file is dual licensed under the MIT and the University of Illinois Open
6e1eabcdfSLouis Dionne // Source Licenses. See LICENSE.TXT for details.
7e1eabcdfSLouis Dionne //
8e1eabcdfSLouis Dionne //===----------------------------------------------------------------------===//
9e1eabcdfSLouis Dionne 
10e1eabcdfSLouis Dionne // <functional>
11e1eabcdfSLouis Dionne 
12e1eabcdfSLouis Dionne // template<class F>
13e1eabcdfSLouis Dionne // function(F) -> function<see-below>;
14e1eabcdfSLouis Dionne 
1531cbe0f2SLouis Dionne // UNSUPPORTED: c++03, c++11, c++14
16e1eabcdfSLouis Dionne 
17e1eabcdfSLouis Dionne // The deduction guides for std::function do not handle rvalue-ref qualified
18e1eabcdfSLouis Dionne // call operators and C-style variadics. It also doesn't deduce from nullptr_t.
19e1eabcdfSLouis Dionne // Make sure we stick to the specification.
20e1eabcdfSLouis Dionne 
21e1eabcdfSLouis Dionne #include <functional>
22e1eabcdfSLouis Dionne #include <type_traits>
23e1eabcdfSLouis Dionne 
24e1eabcdfSLouis Dionne struct R { };
operator ()f025e1eabcdfSLouis Dionne struct f0 { R operator()() && { return {}; } };
operator ()f126e1eabcdfSLouis Dionne struct f1 { R operator()(int, ...) { return {}; } };
27e1eabcdfSLouis Dionne 
main(int,char **)28*504bc07dSLouis Dionne int main(int, char**) {
29e1eabcdfSLouis Dionne     std::function f = f0{}; // expected-error{{no viable constructor or deduction guide for deduction of template arguments of 'function'}}
30e1eabcdfSLouis Dionne     std::function g = f1{}; // expected-error{{no viable constructor or deduction guide for deduction of template arguments of 'function'}}
31e1eabcdfSLouis Dionne     std::function h = nullptr; // expected-error{{no viable constructor or deduction guide for deduction of template arguments of 'function'}}
32*504bc07dSLouis Dionne     return 0;
33e1eabcdfSLouis Dionne }
34