2 // { dg-do compile { target c++14 } }
10 template<typename _Tp>
11 struct remove_const<_Tp const>
12 { typedef _Tp type; };
15 template<typename _Tp>
16 struct remove_volatile
17 { typedef _Tp type; };
19 template<typename _Tp>
20 struct remove_volatile<_Tp volatile>
21 { typedef _Tp type; };
24 template<typename _Tp>
28 remove_const<typename remove_volatile<_Tp>::type>::type type;
31 template<typename _Tp>
32 struct remove_reference
33 { typedef _Tp type; };
35 template<typename _Tp>
36 struct remove_reference<_Tp&>
37 { typedef _Tp type; };
39 template<typename _Tp>
40 struct remove_reference<_Tp&&>
41 { typedef _Tp type; };
43 template<typename _Tp>
46 using type = typename remove_reference<typename remove_const<_Tp>::type>::type;
49 template<typename _Tp>
53 template<typename _Tp>
55 forward(typename std::remove_reference<_Tp>::type& __t) noexcept
56 { return static_cast<_Tp&&>(__t); }
59 template<typename _Arg>
62 template<typename _CVArg, typename _Tuple>
64 operator()(_CVArg&& __arg, _Tuple&) const volatile
65 { return std::forward<_CVArg>(__arg); }
68 template<typename _Functor, typename _Bound_args>
72 _Bound_args _M_bound_args;
74 template<typename _Args, typename _Result
75 = decltype( std::declval<_Functor&>()(
76 _Mu<_Bound_args>()( std::declval<_Bound_args&>(),
77 std::declval<_Args&>() ) ) )>
79 operator()(_Args&& __args) { return {}; }
81 template<typename _Args, typename _Result
82 = decltype( std::declval<volatile _Functor&>()(
83 _Mu<_Bound_args>()( std::declval<volatile _Bound_args&>(),
84 std::declval<_Args&>() ) ) )>
86 operator()(_Args&& __args) volatile;
90 template<typename _Func, typename _BoundArgs>
91 _Bind<typename decay<_Func>::type, typename decay<_BoundArgs>::type>
92 bind(_Func&& __f, _BoundArgs&& __args)
95 std::forward<_Func>(__f),
96 std::forward<_BoundArgs>(__args)
103 template <typename T>
104 bool isOneOf(const T& )
109 template <typename T, typename FirstType, typename... Tail>
110 bool isOneOf(const T& t, const FirstType& firstValue, const Tail&... tail)
112 return t == firstValue || isOneOf(t, tail...);
117 const auto isOneOfHelper = [](auto&&... params)
119 return isOneOf(std::forward<decltype(params)>(params)...);
122 auto isO = std::bind(isOneOfHelper, 'o');