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 10*902e28deSLouis Dionne 11*902e28deSLouis Dionne // <functional> 12*902e28deSLouis Dionne 13*902e28deSLouis Dionne // class function<R(ArgTypes...)> 14*902e28deSLouis Dionne 15*902e28deSLouis Dionne // R operator()(ArgTypes... args) const 16*902e28deSLouis Dionne 17*902e28deSLouis Dionne #include <functional> 18*902e28deSLouis Dionne #include <cassert> 19*902e28deSLouis Dionne 20*902e28deSLouis Dionne // member data pointer: cv qualifiers should transfer from argument to return type 21*902e28deSLouis Dionne 22*902e28deSLouis Dionne struct Foo { int data; }; 23*902e28deSLouis Dionne f()24*902e28deSLouis Dionnevoid f() { 25*902e28deSLouis Dionne int Foo::*fp = &Foo::data; 26*902e28deSLouis Dionne std::function<int& (const Foo*)> r2(fp); // expected-error {{no matching constructor for initialization of}} 27*902e28deSLouis Dionne } 28