auto_any_cast.hpp 493 Bytes
Newer Older
Paul's avatar
Paul committed
1
2
3
4
5
6
7
#ifndef MIGRAPH_GUARD_RTGLIB_AUTO_ANY_CAST_HPP
#define MIGRAPH_GUARD_RTGLIB_AUTO_ANY_CAST_HPP

namespace migraph {

namespace detail {

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

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

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

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

Paul's avatar
Paul committed
27
} // namespace detail
Paul's avatar
Paul committed
28

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

} // namespace migraph

#endif