1*7a6aaf9bSLouis Dionne //===----------------------------------------------------------------------===// 2*7a6aaf9bSLouis Dionne // 3*7a6aaf9bSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*7a6aaf9bSLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5*7a6aaf9bSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*7a6aaf9bSLouis Dionne // 7*7a6aaf9bSLouis Dionne //===----------------------------------------------------------------------===// 8*7a6aaf9bSLouis Dionne 9*7a6aaf9bSLouis Dionne // <functional> 10*7a6aaf9bSLouis Dionne 11*7a6aaf9bSLouis Dionne // class function<R(ArgTypes...)> 12*7a6aaf9bSLouis Dionne 13*7a6aaf9bSLouis Dionne // R operator()(ArgTypes... args) const 14*7a6aaf9bSLouis Dionne 15*7a6aaf9bSLouis Dionne #include <functional> 16*7a6aaf9bSLouis Dionne #include <cassert> 17*7a6aaf9bSLouis Dionne 18*7a6aaf9bSLouis Dionne // member data pointer: cv qualifiers should transfer from argument to return type 19*7a6aaf9bSLouis Dionne 20*7a6aaf9bSLouis Dionne struct A_int_1 21*7a6aaf9bSLouis Dionne { A_int_1A_int_122*7a6aaf9bSLouis Dionne A_int_1() : data_(5) {} 23*7a6aaf9bSLouis Dionne 24*7a6aaf9bSLouis Dionne int data_; 25*7a6aaf9bSLouis Dionne }; 26*7a6aaf9bSLouis Dionne 27*7a6aaf9bSLouis Dionne void test_int_1()28*7a6aaf9bSLouis Dionnetest_int_1() 29*7a6aaf9bSLouis Dionne { 30*7a6aaf9bSLouis Dionne // member data pointer 31*7a6aaf9bSLouis Dionne { 32*7a6aaf9bSLouis Dionne int A_int_1::*fp = &A_int_1::data_; 33*7a6aaf9bSLouis Dionne A_int_1 a; 34*7a6aaf9bSLouis Dionne std::function<int& (const A_int_1*)> r2(fp); 35*7a6aaf9bSLouis Dionne const A_int_1* ap = &a; 36*7a6aaf9bSLouis Dionne assert(r2(ap) == 6); 37*7a6aaf9bSLouis Dionne r2(ap) = 7; 38*7a6aaf9bSLouis Dionne assert(r2(ap) == 7); 39*7a6aaf9bSLouis Dionne } 40*7a6aaf9bSLouis Dionne } 41*7a6aaf9bSLouis Dionne main(int,char **)42*7a6aaf9bSLouis Dionneint main(int, char**) 43*7a6aaf9bSLouis Dionne { 44*7a6aaf9bSLouis Dionne test_int_1(); 45*7a6aaf9bSLouis Dionne 46*7a6aaf9bSLouis Dionne return 0; 47*7a6aaf9bSLouis Dionne } 48