scenario_simulator_v2 C++ API
overload.hpp
Go to the documentation of this file.
1 // Copyright 2015 TIER IV, Inc. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef OPENSCENARIO_INTERPRETER__UTILITY__OVERLOAD_HPP_
16 #define OPENSCENARIO_INTERPRETER__UTILITY__OVERLOAD_HPP_
17 
18 #include <type_traits>
19 #include <utility>
20 
22 {
23 inline namespace utility
24 {
25 template <typename...>
26 struct overloaded;
27 
28 template <typename T>
29 struct overloaded<T> : public T
30 {
31  overloaded(T && x) : T(std::forward<decltype(x)>(x)) {}
32 
33  using T::operator();
34 };
35 
36 template <typename T, typename U, typename... Ts>
37 struct overloaded<T, U, Ts...> : public T, public overloaded<U, Ts...>
38 {
39  overloaded(T && x, U && y, Ts &&... xs)
40  : T(std::forward<decltype(x)>(x)),
41  overloaded<U, Ts...>(std::forward<decltype(y)>(y), std::forward<decltype(xs)>(xs)...)
42  {
43  }
44 
45  using T::operator();
46 
48 };
49 
50 template <typename... Ts>
51 constexpr auto overload(Ts &&... xs) ->
53 {
54  return {std::forward<decltype(xs)>(xs)...};
55 }
56 } // namespace utility
57 } // namespace openscenario_interpreter
58 
59 #endif // OPENSCENARIO_INTERPRETER__UTILITY__OVERLOAD_HPP_
constexpr auto overload(Ts &&... xs) -> typename utility::overloaded< typename std::decay< Ts >::type... >
Definition: overload.hpp:51
Definition: escape_sequence.hpp:22
Definition: cache.hpp:27
Definition: junit5.hpp:25
overloaded(T &&x, U &&y, Ts &&... xs)
Definition: overload.hpp:39
overloaded(T &&x)
Definition: overload.hpp:31
Definition: overload.hpp:26