1059256914c5dd8684c44629a020aac50159d1401Marshall Clow//===----------------------------------------------------------------------===//
2059256914c5dd8684c44629a020aac50159d1401Marshall Clow//
3059256914c5dd8684c44629a020aac50159d1401Marshall Clow//                     The LLVM Compiler Infrastructure
4059256914c5dd8684c44629a020aac50159d1401Marshall Clow//
5059256914c5dd8684c44629a020aac50159d1401Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open
6059256914c5dd8684c44629a020aac50159d1401Marshall Clow// Source Licenses. See LICENSE.TXT for details.
7059256914c5dd8684c44629a020aac50159d1401Marshall Clow//
8059256914c5dd8684c44629a020aac50159d1401Marshall Clow//===----------------------------------------------------------------------===//
9059256914c5dd8684c44629a020aac50159d1401Marshall Clow
10059256914c5dd8684c44629a020aac50159d1401Marshall Clow// <functional>
11059256914c5dd8684c44629a020aac50159d1401Marshall Clow
12059256914c5dd8684c44629a020aac50159d1401Marshall Clow// template<cReturnable S, ClassType T>
13059256914c5dd8684c44629a020aac50159d1401Marshall Clow//   const_mem_fun_t<S,T>
14059256914c5dd8684c44629a020aac50159d1401Marshall Clow//   mem_fun(S (T::*f)() const);
152e390822e56bb0dbd876d02f806dc19f0f97f0a6Marshall Clow// Removed in c++17
16059256914c5dd8684c44629a020aac50159d1401Marshall Clow// UNSUPPORTED: c++98, c++03, c++11, c++14
17059256914c5dd8684c44629a020aac50159d1401Marshall Clow
18059256914c5dd8684c44629a020aac50159d1401Marshall Clow#include <functional>
19059256914c5dd8684c44629a020aac50159d1401Marshall Clow#include <cassert>
20059256914c5dd8684c44629a020aac50159d1401Marshall Clow
21059256914c5dd8684c44629a020aac50159d1401Marshall Clow#include "test_macros.h"
22059256914c5dd8684c44629a020aac50159d1401Marshall Clow
23059256914c5dd8684c44629a020aac50159d1401Marshall Clowstruct A
24059256914c5dd8684c44629a020aac50159d1401Marshall Clow{
25059256914c5dd8684c44629a020aac50159d1401Marshall Clow    char a1() {return 5;}
26059256914c5dd8684c44629a020aac50159d1401Marshall Clow    short a2(int i) {return short(i+1);}
27059256914c5dd8684c44629a020aac50159d1401Marshall Clow    int a3() const {return 1;}
28059256914c5dd8684c44629a020aac50159d1401Marshall Clow    double a4(unsigned i) const {return i-1;}
29059256914c5dd8684c44629a020aac50159d1401Marshall Clow};
30059256914c5dd8684c44629a020aac50159d1401Marshall Clow
31059256914c5dd8684c44629a020aac50159d1401Marshall Clowint main()
32059256914c5dd8684c44629a020aac50159d1401Marshall Clow{
33059256914c5dd8684c44629a020aac50159d1401Marshall Clow    const A a = A();
34059256914c5dd8684c44629a020aac50159d1401Marshall Clow    assert(std::mem_fun(&A::a3)(&a) == 1);
35059256914c5dd8684c44629a020aac50159d1401Marshall Clow}
36