• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 
3 Copyright Barrett Adair 2015-2017
4 Distributed under the Boost Software License, Version 1.0.
5 (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
6 
7 */
8 
9 #include <type_traits>
10 #include <cstdint>
11 #include <memory>
12 #include <boost/callable_traits.hpp>
13 #include "test.hpp"
14 
15 
16 struct foo1 {
barfoo117     int bar(char, float&, int = 0) { return{}; }
18 };
19 
20 struct foo2 {
barfoo221      int bar(char, float&, int = 0, ...) { return{}; }
22 };
23 
24 struct foo3 {
operator ()foo325     int operator()(char, float&, int = 0) { return{}; }
26 };
27 
28 struct foo4 {
operator ()foo429     int operator()(char, float&, int = 0, ...) { return{}; }
30 };
31 
foo5(char,float &,int=0)32 int foo5(char, float&, int = 0) { return{}; }
33 
foo6(char,float &,int=0,...)34 int foo6(char, float&, int = 0, ...) { return{}; }
35 
36 struct foo7 {
barfoo737     int bar() { return{}; }
38 };
39 
40 using std::is_same;
41 
main()42 int main() {
43 
44     {
45         using pmf = decltype(&foo1::bar);
46         using args_t =  TRAIT(args, pmf);
47         CT_ASSERT(is_same<args_t, std::tuple<foo1&, char, float&, int>>{});
48     } {
49         using pmf = decltype(&foo2::bar);
50         using args_t =  TRAIT(args, pmf);
51         CT_ASSERT(is_same<args_t, std::tuple<foo2&, char, float&, int>>{});
52     } {
53         using args_t =  TRAIT(args, foo3);
54         CT_ASSERT(is_same<args_t, std::tuple<char, float&, int>>{});
55     } {
56         using args_t =  TRAIT(args, foo4);
57         CT_ASSERT(is_same<args_t, std::tuple<char, float&, int>>{});
58     } {
59         using args_t =  TRAIT(args, decltype(foo5));
60         CT_ASSERT(is_same<args_t, std::tuple<char, float&, int>>{});
61     } {
62         using args_t =  TRAIT(args, decltype(foo6));
63         CT_ASSERT(is_same<args_t, std::tuple<char, float&, int>>{});
64     }
65 
66     return 0;
67 }
68