1*902e28deSLouis Dionne //===----------------------------------------------------------------------===//
2*902e28deSLouis Dionne //
3*902e28deSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*902e28deSLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5*902e28deSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*902e28deSLouis Dionne //
7*902e28deSLouis Dionne //===----------------------------------------------------------------------===//
8*902e28deSLouis Dionne 
9*902e28deSLouis Dionne // UNSUPPORTED: c++03, c++11, c++14
10*902e28deSLouis Dionne 
11*902e28deSLouis Dionne // <functional>
12*902e28deSLouis Dionne //
13*902e28deSLouis Dionne // Make sure we can't initialize a std::function using an allocator (http://wg21.link/p0302r1).
14*902e28deSLouis Dionne // These constructors were removed in C++17.
15*902e28deSLouis Dionne 
16*902e28deSLouis Dionne #include <functional>
17*902e28deSLouis Dionne #include <memory>
18*902e28deSLouis Dionne 
19*902e28deSLouis Dionne struct S : public std::function<void()> { using function::function; };
20*902e28deSLouis Dionne 
f()21*902e28deSLouis Dionne void f() {
22*902e28deSLouis Dionne   S f1( [](){} );
23*902e28deSLouis Dionne   S f2(std::allocator_arg, std::allocator<int>{}, f1); // expected-error {{no matching constructor for initialization of 'S'}}
24*902e28deSLouis Dionne }
25