auto_any_cast.hpp 593 Bytes
Newer Older
Paul's avatar
Paul committed
1
2
#ifndef MIGRAPH_GUARD_RTGLIB_AUTO_ANY_CAST_HPP
#define MIGRAPH_GUARD_RTGLIB_AUTO_ANY_CAST_HPP
3
#include <migraph/config.hpp>
Paul's avatar
Paul committed
4

5
6
namespace migraph {
inline namespace MIGRAPH_INLINE_NS {
Paul's avatar
Paul committed
7
8
9

namespace detail {

Paul's avatar
Paul committed
10
11
12
13
template <class U>
void any_cast()
{
}
Paul's avatar
Paul committed
14

Paul's avatar
Paul committed
15
template <class T>
Paul's avatar
Paul committed
16
17
18
19
20
21
22
23
24
25
struct auto_any_caster
{
    T& x;

    template <class U>
    operator U&()
    {
        return any_cast<U>(x);
    }

Paul's avatar
Paul committed
26
    operator T&() { return x; }
Paul's avatar
Paul committed
27
28
};

Paul's avatar
Paul committed
29
} // namespace detail
Paul's avatar
Paul committed
30

Paul's avatar
Paul committed
31
template <class T>
Paul's avatar
Paul committed
32
33
34
35
36
detail::auto_any_caster<T> auto_any_cast(T& x)
{
    return {x};
}

37
} // namespace MIGRAPH_INLINE_NS
Paul's avatar
Paul committed
38
39
40
} // namespace migraph

#endif