18d4860aaSLouis Dionne //===----------------------------------------------------------------------===// 28d4860aaSLouis Dionne // 38d4860aaSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 48d4860aaSLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 58d4860aaSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 68d4860aaSLouis Dionne // 78d4860aaSLouis Dionne //===----------------------------------------------------------------------===// 88d4860aaSLouis Dionne 98d4860aaSLouis Dionne // <functional> 108d4860aaSLouis Dionne 118d4860aaSLouis Dionne // UNSUPPORTED: c++03, c++11, c++14 128d4860aaSLouis Dionne 138d4860aaSLouis Dionne // class function<R(ArgTypes...)> 148d4860aaSLouis Dionne 158d4860aaSLouis Dionne // template<class A> function(allocator_arg_t, const A&, function&&); 168d4860aaSLouis Dionne // 178d4860aaSLouis Dionne // This signature was removed in C++17 188d4860aaSLouis Dionne 198d4860aaSLouis Dionne #include <functional> 208d4860aaSLouis Dionne #include <memory> 217afa1598SNikolas Klauser #include <utility> 228d4860aaSLouis Dionne 238d4860aaSLouis Dionne class A 248d4860aaSLouis Dionne { 258d4860aaSLouis Dionne int data_[10]; 268d4860aaSLouis Dionne public: 278d4860aaSLouis Dionne static int count; 288d4860aaSLouis Dionne A()298d4860aaSLouis Dionne A() 308d4860aaSLouis Dionne { 318d4860aaSLouis Dionne ++count; 328d4860aaSLouis Dionne for (int i = 0; i < 10; ++i) 338d4860aaSLouis Dionne data_[i] = i; 348d4860aaSLouis Dionne } 358d4860aaSLouis Dionne A(const A &)368d4860aaSLouis Dionne A(const A&) {++count;} 378d4860aaSLouis Dionne ~A()388d4860aaSLouis Dionne ~A() {--count;} 398d4860aaSLouis Dionne operator ()(int i) const408d4860aaSLouis Dionne int operator()(int i) const 418d4860aaSLouis Dionne { 428d4860aaSLouis Dionne for (int j = 0; j < 10; ++j) 438d4860aaSLouis Dionne i += data_[j]; 448d4860aaSLouis Dionne return i; 458d4860aaSLouis Dionne } 468d4860aaSLouis Dionne }; 478d4860aaSLouis Dionne 488d4860aaSLouis Dionne int A::count = 0; 498d4860aaSLouis Dionne g(int)508d4860aaSLouis Dionneint g(int) { return 0; } 518d4860aaSLouis Dionne f()52*72f0edf3SLouis Dionnevoid f() { 538d4860aaSLouis Dionne std::function<int(int)> f = A(); 548d4860aaSLouis Dionne std::function<int(int)> f2(std::allocator_arg, std::allocator<A>(), std::move(f)); // expected-error {{no matching constructor for initialization of}} 558d4860aaSLouis Dionne } 56